見下面我的代碼:C++編譯器何時默認初始化指針?
class A
{
public:
A()
{
i = 0;
if(pt != NULL)
{
std::cout << "why" << std::endl;
}
}
A(bool flag)
{
i = 0;
pt = new B(3.14);
}
private:
class B
{
public:
B(double in) : j(in) {}
private:
double j;
};
private:
int i;
B *pt;
};
int main(int argc, char *argv[])
{
A obj; // place1
int *p;
if(p != NULL)
{
std::cout << "test2" << std::endl;
}
return 0;
}
在這一段代碼,我想知道,如果pt
將被初始化@place1
。
另一個問題是,如果我刪除obj
的定義,將會打印test2
,如果不是,那麼爲什麼?
正如所討論的[這裏] [1],指針在聲明時未被初始化。 [1]:http://stackoverflow.com/questions/1910832/why-arent-pointers-initialized-with-null-by-default – Codor
靜態和全局變量初始化爲0。自動變量包含垃圾,並可能包含任何東西。 –
[C中聲明的未初始化變量會發生什麼?它是否有價值?](http://stackoverflow.com/questions/1597405/what-happens-to-a-declared-uninitialized-variable-in-c-does-it-have-a-value) –