以此代码为例:
class MyClass
{
public:
~MyClass()
{
cout << "Destructor called\n";
}
};
int main()
{
MyClass Testvar;
// destructer called for this
MyClass *ptrvar;
ptrvar = &Testvar;
// but not for this
}
Run Code Online (Sandbox Code Playgroud)
它给我带来了很多困惑.上面的代码打印:析构函数只调用一次.我在main中声明了两个MyClass实例,其中一个是MyClass类型的普通变量,另一个是指向普通变量的相同类型的指针.这里不需要析构函数(没有动态分配),但为了举例,我在类中定义了一个.因此,因为定义了两个类实例,所以应该两次调用析构函数.但是,当我运行此代码时,这不会发生.如果我删除指针并定义一个更正常的实例,程序将打印:
Destructor调用了Destructor
我的观察是当指针实例超出范围时,不会隐式调用析构函数.我是对的还是只是遗漏了什么.