【发布时间】:2013-08-16 09:55:09
【问题描述】:
我在这个论坛上阅读了很多关于指针向量的内容,但无法理解删除存储在向量中的指针的想法。以下是我的查询:
假设我动态创建一个对象数组
CPoint* dynamic_array;
dynamic_array = new CPoint[30714];
我现在必须通过指针向量在另一个类的对象中使用这些值
vector<CPoint*> vector_of_pointers;
然后,我将使用以下方法将dynamic_array 的元素划分为另一个类的对象
Class B{
vector<CPoint*> vector_of_pointers;
public:
void function(CPoint* a){
if (some condition){
vector_of_pointers.push_back(a);
}
};
其中a 将始终是指向来自dynamic_array 的对象的指针
然后我计划在对其对象的需求结束后删除最初创建的 dynamic_array。
delete[] dynamic_array;
即使在这样做之后,是否还需要删除向量中的每个指针?如果有必要,我可以在 Class B 的析构函数中这样做吗?
抱歉,这是一个简单或愚蠢的问题,但我是 C++ 新手,我的应用程序需要使用容器。
【问题讨论】:
-
您很可能只想要一个
std::vector<CPoint>。如果您需要指针,请使用智能指针。 -
不需要删除vector的元素。事实上,这将是一个错误。调用
delete[]`后,你不能取消引用元素。 -
我认为这里的问题与内存所有权有关。删除 dynamic_array 后,向量中的指针将指向内存中的无效位置。始终如一地使用向量可能会有所帮助。您可能想查看 boost::ptr_vector 或 boost::shared_ptr
标签: c++ pointers vector dynamic-memory-allocation