【发布时间】:2013-08-20 12:13:17
【问题描述】:
我正在尝试动态创建一个指针数组。从我读到现在的内容,这可以在 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;
我问这个是因为我稍后需要这个对象。
【问题讨论】:
-
我是唯一一个阅读 OP 在该数组中 放入 的内容的人吗?如果您添加的指针如您在此处显示的那样,则不,您不需要释放元素(因为您从未分配它们;它们是自动的)。您确实需要删除动态分配的指针数组(并且您是)。如果元素也是动态分配内存(即
newed),您需要在释放指针数组之前释放它们。不管怎样,我强烈劝阻所有这些,并建议你调查std::vector<>的乐趣 -
@WhozCraig 我在很多场合都看到有人建议不要使用
std::vector<>,因为它会减慢程序的速度,而且它分配的内存比实际需要的要大得多。 -
@akash_c 不管这些“人”是谁,他们都错了。没有灵丹妙药,但如果您认为您可以比实现编写者及其在标准库中高度优化和调试的算法更好地管理内存,那么您当然不会在这里发布这样的问题.也就是说,人们很容易低效地使用标准库。但责任几乎总是在用户身上;不是库。它是一种工具,如果使用得当,你将很难击败它。
标签: c++ arrays pointers dynamic-memory-allocation