【发布时间】:2011-09-05 17:29:06
【问题描述】:
我有一堂课:
class A
{
public:
A()
{
std::cout << "Constructor called" << std::endl;
}
~A()
{
std::cout << "Destructor called" << std::endl;
}
A(const A& another)
{
std::cout << "Copy constructor called" << std::endl;
}
A& operator=(const A& another)
{
std::cout << "Assignment operator= called" << std::endl;
}
};
在我非常复杂的项目中,我启动应用后得到以下输出:
Constructor called
但是当我 Ctrl+C 终止我的应用程序时:
Destructor called
Destructor called
并且在整个过程中,没有调用拷贝构造函数和赋值运算符。
我的类A有动态内存分配,我必须在析构函数中释放它,但是析构函数不知何故被调用了两次,这很糟糕。
我不知道是什么导致了这个问题。
我用谷歌搜索了很多。很多关于“析构函数调用两次”的问题是因为隐式调用了复制构造函数(赋值运算符)。
谢谢。
彼得
【问题讨论】:
-
“赋值运算符”不应该是
operator=还是我遗漏了什么? -
抱歉,打错字了。我更正了。
-
既然您显然可以访问源代码,您就不能简单地在析构函数中放置断点,看看发生了什么吗?
-
您能否发布一个出现此问题的最小可编译示例?
-
你能提供sn-ps来说明
A在你的代码中是如何使用的吗?
标签: c++ destructor