我正在尝试动态创建一个指针数组。从我读到的内容到现在,这可以通过以下方式在C ++中完成
CPoint** data_temp;
data_temp = new CPoint*[an_integer];
我稍后会添加指向此数组的指针,该数组将指向一个对象。有些类似的东西,使用for
循环
CPoint A;
CPoint* data = &A; //I am using just a single value but data will also be an array
*data_temp[i] = data; // where data is pointer address
现在问题是如果要释放内存我删除指针数组data_temp
它是否也会删除原始对象,即A
?
delete[] data_temp;
我问这个是因为我需要在稍后阶段使用该对象。
答案 0 :(得分:2)
delete[]
将是要做的事情:这些对象将被自动销毁。但是,由于这是一个指针数组,因此您需要执行此操作将其清空:
for (int i=0; i < num_objects; i++)
{
delete data_temp[i];
}
delete[] data_temp;
这会解除分配每个对象指向的内存,然后删除数组本身。
编辑:我刚注意到你在堆栈上分配了这些对象。如果你想像这样存储它们并自己管理内存,你应该在堆上分配它们,如下所示:CPoint* A = new CPoint();
data_temp[i] = A;
...或者,如果你已经在堆栈上有一个CPoint并且CPoint有一个拷贝构造函数......
data_temp[i] = new CPoint(A);
答案 1 :(得分:2)
没有。它不会。应用于指针数组的delete
将删除大小的数组(在您的情况下为an_integer
。
如果你真的想释放这些指针指向的内存,你必须经历一个for循环
for(int i = 0; i < an_integer; i++){
delete data_temp[i];
}
//Then deallocate the array
delete[] data_temp;
这意味着在您的情况下,您不会最终“删除”堆栈上的A
对象(会导致未定义的行为)。您只会删除等于机器上指针大小的内存量乘以an_integer
。
我会说,在你的情况下,std::vector<A>
是合理的,更好的。
答案 2 :(得分:1)
delete
分配堆分配的对象(即通过调用new
分配的对象)。
答案 3 :(得分:0)
你应该使用一个适合他们的typedef。
typedef CPoint* PCPoint;
此后将PCPoint视为数组。