class Foo{
public:
Foo(){
cout <<"C ";
}
~Foo(){
cout <<"D ";
}
};
void func(){
Foo* p = new Foo;
p = NULL;
}
int main(){
Foo a;
for (int i=0; i<1; i++){
Foo b;
if (true){
Foo c;
}
func();
}
return 0;
}
对于这个问题,输出CCCDCDD,如果我删除FUNC()的主要功能,输出成为CCCDDD,据我所知,前3个C,其中它来自何方,但我不明白剩下的,请解释一下,谢谢。构造函数和析构函数是如何工作的?
'for(int i = 0; i <1; i ++)'本质上执行它的块一次,'if(true)'也一样。如果你想定义一个范围,你可以简单地使用一对大括号('{}')。您不需要在流控制语句的上下文中使用它们,您可以简单地执行'int main(){Foo a; {Foo b; {Foo c; } func(); } return 0; }' –
通过调试器逐步完成此操作可能会有所帮助...... – Borgleader
'p = NULL;'实际上并不会销毁对象。新的Foo对象被泄露。这行应该读取'delete p;'。 – cdhowie