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++ 内存分配向量的指针的主要内容,如果未能解决你的问题,请参考以下文章

当向量需要更多内存并重新分配内存时,指针会发生啥?

C++ 的向量如何分配内存

将内存分配给结构向量的指针时出现 SEG FAULT

将已知长度的 char 指针转换为 char 向量而不分配新内存

分配类型为自己的向量的内存 Class C++

C++ 指针和内存分配