删除对象两次
Deleting an object twice
我只是一个新手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
。
相关文章:
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- C++析构函数调用两次,堆栈分配的复合对象
- C++两次从文件保存对象读取多重继承
- 在条件运算符中使用对象两次会产生 UB 吗?
- 为什么我的对象似乎被创建了两次
- 为什么静态thread_local对象在C++构造两次
- 如何在同一个线程上用同一个互斥对象锁定两次
- 为什么在 C++ 中,当对象包含在另一个对象中时,复制构造函数被调用两次
- 两次构造对象
- 删除对象两次
- C++-如果我使用映射,我的对象会被删除两次吗
- 在Qt 5.4中可以对互斥对象进行两次解锁吗
- 如何正确地将对象添加到向量,而无需两次调用析构函数
- 静态 c++ 对象中的 JNI 环境指针并调用连续两次使用字符串参数的 Java 函数会使 JVM 崩溃
- C++ 使用放置新的未定义行为构造对象两次
- 在为对象调用析构函数时,它被调用两次
- 使用默认构造函数返回临时对象时,Destuctor调用了两次
- c++如何初始化对象?下面的情况是这样做两次吗
- 对于在同一地址构造两次的对象,编译器如何知道必须调用第二个析构函数
- 为什么析构函数构造的两个对象被调用三次