当类的指针实例超出范围时,是否会调用析构函数?

use*_*471 -2 c++ destructor

以此代码为例:

  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

我的观察是当指针实例超出范围时,不会隐式调用析构函数.我是对的还是只是遗漏了什么.

nou*_*ney 5

我在main中声明了两个MyClass实例

不,你没有.您声明了一个实例,MyClass并创建了一个指向该实例的指针.就这样.

您的代码行为是正确的.

我的观察是当指针实例超出范围时,不会隐式调用析构函数.我是对的还是只是遗漏了什么.

那就对了.C++不提供垃圾收集器.你必须自己跟踪你的指针.您可以使用智能指针来执行此操作.