构造函数和析构函数如何工作?

kdhug886
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,如果我把main函数中的func()删掉,输出就变成了CCCDDD,我明白了前3个C是哪里来的,但我不明白剩下的,请解释一下, 谢谢。

sigvaldm
  1. C - a 被构造
  2. C - b 被构造
  3. C - c 被构造
  4. D - c 被破坏,因为你离开了范围
  5. C - 一个对象 Foo 是动态分配的并由 p 指向,但由于它是动态分配的,并且永远不会被删除,所以它永远不会被破坏。
  6. D - b 被破坏
  7. D - a 被破坏

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章