2013-05-16 68 views
2

问题我有这样的代码:C++,与析构函数

#include <iostream> 

using namespace std; 

class X 
{ 
    int a; 
public: 
    X() 
    { 
     cout<<"X constructor was called"<<endl; 
    } 
    X(int n) 
    { 
     cout<<"X(int) constructor was called"<<endl; 
    } 
    ~X(){cout<<"X dectructor was called"<<endl;} 
}; 
int main() 
{ 
    X x(3); 

    system("PAUSE"); 

    return 0; 
} 

这个代码执行的结果:X(int)构造被调用。 但为什么析构函数消息尚未打印?

据我所知,我们通过调用构造函数X(int)来创建对象x,并且在程序结束时这个对象必须被删除,但是它没有。

+1

您是否尝试过调试并在析构函数中放置一个断点? –

回答

3

,因为它是在堆栈中分配,析构函数应该在这里呼吁:

int main() 
{ 
    X x(3); 

    system("PAUSE"); 

    return 0; 
} // X destructor (x go out of context) 
1

析构函数将不会被调用,直到对象超出范围,并且直到您退出主要才会发生。

这就是为什么消息不会弹出:控制台消失了,当对象消失了。

2

析构函数在对象超出作用域时运行。我猜你把system("pause")看到它的消息。那么没有,x的范围还没有结束,它在return 0;后结束。

从终端运行你的程序,看看你自己。

1

试试这个:

int main() 
{ 
    { 
     X x(3); 
    } // Your x object is being destroyed here 

    system("PAUSE"); 

    return 0; 
} 

它将为X局部范围,让你看到X遭到破坏。