删除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+中动态分配的类实例+;? 在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 正在调用的析构函数似乎运行正常。验证的内存块时出错(这是调试生成)。可能是因为

这就是我尝试删除的第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
正在调用的析构函数似乎运行正常。验证的内存块时出错(这是调试生成)。可能是因为错误是因为重写堆分配造成的,但是我想确保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
不确定。