指针未在c ++类中初始化

时间:2017-03-08 01:20:31

标签: c++

我是c ++和指针的新手,我对这个c ++代码有疑问。通常这段代码必须显示" true"但它并没有。提前谢谢。

class Trie{  
   public:
      Trie* root;
      int color;
      Trie(){
         color=0;
       }
       ~Trie(){
       }
  };

 int main(){
   Trie test;
   if(test.root==nullptr)cout<<"true"<<endl;
  }

1 个答案:

答案 0 :(得分:9)

C和C ++,与Java和C#不同,出于性能原因不会自动对内存或对象成员进行零初始化,因为如果您只是设置自己的值,则无法覆盖内存两次;缺点是你必须非常小心,以确保你不首先使用未初始化的数据。

要解决您的问题,您可以在构造函数中或在初始化列表中设置成员:

Trie() {
    this->color = 0;
    this->root  = nullptr;
}

或者:

Trie() :
    color ( 0 ),
    root  ( nullptr )
{    
}

对于color值,请考虑使用元组,因为不能保证int将是32位整数(假设您需要存储0-255个RGB值):< / p>

struct RgbColor {
    uint8_t r;
    uint8_t g;
    uint8_t b;

    RgbColor() :
        RgbColor( 0, 0, 0 ) {
    }

    RgbColor(uint8_t r, uint8_t g, uint8_t b) :
        r(r),
        g(g),
        b(b) {
    }

    RgbColor(uint32_t rgb) :
        r( ( rgb >> 24 ) & 0xFF ),
        g( ( rgb >> 16 ) & 0xFF ),
        b( ( rgb >>  8 ) & 0xFF ) {
    }
}