能举一个析构函数中调用delete导致程序崩溃的例子吗
时间: 2024-01-28 12:05:17 浏览: 87
构造函数与析构函数的调用顺序
当在析构函数中调用delete时,如果指向的对象已经由自己或其他代码释放过,会导致程序崩溃。例如:
```c++
class MyClass {
public:
MyClass(int* ptr) : m_ptr(ptr) {}
~MyClass() {
delete m_ptr; // 在析构函数中调用delete
}
private:
int* m_ptr;
};
int main() {
int* ptr = new int(42);
MyClass obj(ptr);
delete ptr; // 手动释放掉ptr指向的对象
}
```
在这个例子中,我们在析构函数中调用了delete删除m_ptr指向的对象。然而,在main函数中,我们又手动释放了ptr指向的对象。当MyClass对象在作用域结束时调用析构函数,它会再次试图删除已经被释放的对象,导致程序崩溃。
阅读全文