hak*_*010 3 c++ crash class object delete-operator
我制作了一个动态的对象数组.当我调用delete []时,程序崩溃并停止响应.但它确实有奇怪的行为:调用所有析构函数和崩溃.看看这段代码和输出.分配所有阵列的所有内存.
//main file
#include "myobject.h"
int size;
myObject *foo;
//some operations to estimate size
foo = new myObject[size];
//some operations with myObject
std::cout<<"size: "<<size<<"\n";
std::cout<<"Deleting object\n";
size=0;
delete [] foo;
Run Code Online (Sandbox Code Playgroud)
下一个文件:
//myobject.h
class myObject
{
public:
int number;
Object1 ob1[64]
Object2 *ob2;
myObject(){ };
~myObject()
{
std::cout<<"delete "<<number<<"\n";
delete [] ob1;
delete [] ob2;
};
}
Run Code Online (Sandbox Code Playgroud)
并输出:
size: 11
Deleting object
delete 10
delete 9
delete 8
delete 7
delete 6
delete 5
delete 4
delete 3
delete 2
delete 1
delete 0
Run Code Online (Sandbox Code Playgroud)
然后它崩溃并停止响应.
你只能调用delete[]
返回的指针new[]
,你必须完成一次.这同样适用于delete
和new
.
特别是,你不能delete[] obj1
因为它是一个内置数组,而不是一个指针,并且obj2
只有它指向未分配的内存new[]
.
delete [] ob1;
Run Code Online (Sandbox Code Playgroud)
你没有new obj1
; 它是包含在对象中的数组.删除未分配的任何内容会new
产生未定义的行为,这可能是崩溃.
如果你要像这样玩杂耍指针,那么你需要了解三法则以避免你将遇到的下一个死亡陷阱.然后了解RAII和智能指针,忘掉这个危险的废话.