c++ 内存分配向量的指针
Posted
技术标签:
【中文标题】c++ 内存分配向量的指针【英文标题】:c++ memory allocation vector of pointers 【发布时间】:2014-05-09 12:36:03 【问题描述】:我正在并行化代码,因此使用结构 parallel_vector (ppl)。问题与标准 std::vector 相同...
我首先构建一个指向结构的指针向量。 Struct 非常庞大,其中包含原始类型成员以及庞大的原始类型数组(23000 个元素)。
我为这个结构实现了一个深拷贝构造函数。
然后,我循环访问此列表中的元素。
for (int ii=0; ii < nbBlocks; ii++)
MyStruct* Block_temp = list_structs.at( ii );
// ...
当我访问位置 ii 的元素时,我是否创建了一个具有内存分配的新对象?我应该在当前循环结束时删除 Block_temp,还是会破坏向量中包含的对象?
谢谢
【问题讨论】:
你为什么要存储指针?向量的元素已经动态分配。如果您不想要顺序存储,请使用std::list
,尽管这会带来其他缺点/优势。
如果向量包含指针,那么当您访问元素 (ii) 时,您最多是在复制一个指针。
【参考方案1】:
您有一个指向向量中已有内容的指针,该向量似乎拥有您的数据,所以不要删除它。复制指针不是分配。
考虑:
int* a = new int;
int* b = a; // Pretty much what you are doing
delete a; // If you deleted b, then this would be a double delete, and using a or b after that point would be bad
查看 std::vector::at 的文档
http://www.cplusplus.com/reference/vector/vector/at/
【讨论】:
以上是关于c++ 内存分配向量的指针的主要内容,如果未能解决你的问题,请参考以下文章