C++中的默认初始化

sky*_*oor 2 c++

我对C++中的默认初始化有疑问.我被告知非POD对象将自动初始化.但我对以下代码感到困惑.

为什么当我使用指针时,变量i被初始化为0,但是,当我声明一个局部变量时,它不是.我使用g ++作为编译器.

class INT {
    public: int i;

};

int main () {

    INT* myint1 = new INT;
    INT myint2;
    cout<<"myint1.i is "<<myint1->i<<endl;
    cout<<"myint2.i is "<<myint2.i<<endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是

myint1.i是0

myint2.i是-1078649848

Ale*_*ler 8

你需要在INT中声明一个c'tor并强制'i'到一个明确定义的值.

class INT {
public:

    INT() : i(0) {}

 ...
};
Run Code Online (Sandbox Code Playgroud)

i仍然是POD,因此默认情况下不会初始化.无论是在堆栈上还是在堆上分配都没有区别 - 在这两种情况下,值if i都是未定义的.


pm1*_*100 6

在这两种情况下都没有初始化,你很幸运在第一个中得到0