c++的析构函数有问题
c++, have problems with destructor
我的代码是:
#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,并且在程序结束时必须删除该对象,但它没有删除。
由于它是在堆栈上分配的,因此应该在这里调用析构函数:
int main()
{
X x(3);
system("PAUSE");
return 0;
} // X destructor (x go out of context)
析构函数在对象超出作用域时运行。我猜你放system("pause")
是为了看它的信息。不,x
的范围还没有结束,它在return 0;
之后结束。
从终端运行你的程序,你自己看看。
析构函数只有在对象超出作用域时才会被调用,而直到退出main时才会被调用。
这就是为什么消息没有弹出:控制台在对象消失的时候消失了
试试这个:
int main()
{
{
X x(3);
} // Your x object is being destroyed here
system("PAUSE");
return 0;
}
它将为X创建一个局部作用域,因此您将看到X被销毁。
相关文章:
- 基类中的默认析构函数禁用子类中的移动构造函数(如果有成员)
- C++中的基元类型有析构函数吗?
- 有没有办法保证析构函数的相对顺序?
- 在调用其析构函数之前,是否有任何实际理由检查某些东西是否可破坏?
- 有一个构造函数,但有两个析构函数
- 拥有"受保护的非虚拟析构函数"与"受保护虚拟析构构函数"有什么好处
- 类中C++析构函数的 Xcode 问题
- 如果在C++中不需要构造函数或析构函数,是否有必要显式声明它?
- "virtual"对C++析构函数有何影响?
- 错误:在“(”标记之前进行预期的构造函数、析构函数或类型转换.即使我有一个构造函数
- 有没有办法让shared_ptr.reset(new obj)首先调用析构函数?
- 为什么这个 Deque 析构函数有内存泄漏
- 为什么复制构造函数不是微不足道的,因为有一个用户定义的析构函数?
- 为什么我以前调用析构函数的方式会导致模因问题
- 二叉搜索树析构函数问题
- 我不明白析构函数有什么问题?
- 从没有虚拟析构函数的类继承
- c++的析构函数有问题
- c++问题析构函数
- 我可以有一个~析构函数(void)吗?