我只是C ++的新手,我有一个关于删除main函数中的对象的问题,我的代码是
class aClass
{
public:
int data;
aClass* pointer=NULL;
aClass(int x): data(x) {
cout << "calling int constructor\n";
}
~aClass() {
cout <<"Index " <<(*this).data<<" calling destructor\n";
}
};
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函数应该找不到它并再次删除它?
答案 0 :(得分:1)
第一次在第一次调用析构函数:
delete pointer;
第二次在函数返回之前自动销毁对象ob1
。
<强> PS 强>
该代码受未定义行为的影响。仅当指针指向通过调用delete
返回的内存时,才允许在指针上调用new
。