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

med*_*ine 2 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;
  }
Run Code Online (Sandbox Code Playgroud)

Dai*_*Dai 9

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

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

Trie() {
    this->color = 0;
    this->root  = nullptr;
}
Run Code Online (Sandbox Code Playgroud)

要么:

Trie() :
    color ( 0 ),
    root  ( nullptr )
{    
}
Run Code Online (Sandbox Code Playgroud)

至于你的color值,考虑使用元组代替,因为没有保证int是32位整数(假设你需要存储0-255个RGB值):

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 ) {
    }
}
Run Code Online (Sandbox Code Playgroud)