删除对象两次

Deleting an object twice

本文关键字:两次 对象 删除      更新时间:2023-10-16

我只是一个新手C++,我有一个关于删除main函数中的对象的问题,我的代码是

 class aClass
 {
 public:
   int data;
   aClass* pointer=NULL;
   aClass(int x): data(x) {
     cout << "calling int constructorn";
   }
   ~aClass() {     
       cout <<"Index " <<(*this).data<<"  calling destructorn";
   }
};
int main()
{
  aClass ob1(1);
  aClass* pointer=&ob1;
  delete pointer;
  return 0;
}

输出为:

calling int constructor
Index 1  calling destructor
Index 1  calling destructor

我只是不知道为什么 ob1 被删除两次,因为删除点已经有它指向的 ob1,所以 int 函数应该找不到它并再次删除它?

构函数在行中首次调用:

delete pointer;

当对象ob1在函数返回之前自动销毁时,第二次调用它。

附言

该代码受制于未定义的行为。仅当指针指向通过调用 new 返回的内存时,才允许在指针上调用 delete