删除C+中动态分配的类实例+;? 在C++中,我有一个类A和第二个B类,其中包含一个分配的数组。 class A { ~A() {/*delete members of A which were dynamically allocated*/} //...members... }; class B { A *arrayOfA; // allocated by arrayOfA=new A[123]; };
这就是我尝试删除的第I个实例:删除C+中动态分配的类实例+;? 在C++中,我有一个类A和第二个B类,其中包含一个分配的数组。 class A { ~A() {/*delete members of A which were dynamically allocated*/} //...members... }; class B { A *arrayOfA; // allocated by arrayOfA=new A[123]; };,c++,delete-operator,C++,Delete Operator,这就是我尝试删除的第I个实例: // Code to delete an instance of A from B: // delete arrayofA[i]; // gives a compilation error, because delete requires a pointer delete &arrayofA[i]; // compiles, but gives a runtime error 正在调用的析构函数似乎运行正常。验证的内存块时出错(这是调试生成)。可能是因为
// Code to delete an instance of A from B:
// delete arrayofA[i]; // gives a compilation error, because delete requires a pointer
delete &arrayofA[i]; // compiles, but gives a runtime error
正在调用的析构函数似乎运行正常。验证的内存块时出错(这是调试生成)。可能是因为错误是因为重写堆分配造成的,但是我想确保C++语法对我正在做的事情是正确的。
64位windows7;Visual Studio 2017 v15.3.5应使用
delete
删除分配了new
的对象,并使用delete[]
删除分配了new[]
的对象。任何其他排列都会导致未定义的行为,也可能导致不好的事情发生
A * a = new A();
delete a;
A * b = new A[10];
delete[] b;
A * c = new A[50];
delete c; //UB!!!!
可能是3/5/0的规则。
delete&arrayofA[i]代码>看起来很可疑。你不想delete[]arrayofA代码>而不是?您不仅使用了错误的delete格式,而且这里的i
是什么?你不能删除数组的一部分,所以对我来说没有多大意义。为什么不使用向量呢?还是共享指针?根本不要使用原始指针。正确的方法是std::vector arrayOfA代码>@EdHeal@EdHeal都是有效语法new A()
将值初始化A
对象,而new A
将默认初始化A
对象。如果A
是一个类,则没有区别,但例如如果A
是int
的类型定义,则值初始化将int
设置为零,默认初始化使int
不确定。