【发布时间】:2015-12-30 11:35:33
【问题描述】:
以这段代码为例:
class MyClass
{
public:
~MyClass()
{
cout << "Destructor called\n";
}
};
int main()
{
MyClass Testvar;
// destructer called for this
MyClass *ptrvar;
ptrvar = &Testvar;
// but not for this
}
这给我带来了很多困惑。上面的代码打印: 析构函数调用 只有一次。我在 main 中声明了两个 MyClass 实例,其中一个是 MyClass 类型的普通变量,另一个是指向普通变量的相同类型的指针。这里不需要析构函数(没有动态分配),但为了举例,我在类中定义了一个。因此,因为定义了两个类实例,所以应该调用两次析构函数。但是当我运行这段代码时,这并没有发生。如果我删除指针并再定义一个普通实例,程序会打印:
调用的析构函数 调用析构函数
我的观察是,当指针实例超出范围时,不会隐式调用析构函数。我是对的还是只是错过了什么。
【问题讨论】:
标签: c++ destructor