【发布时间】:2014-02-14 05:05:53
【问题描述】:
假设T 包含一个数组,其大小可能因初始化而异。我正在传递一个指向向量的指针以避免复制所有数据,并初始化如下:
for(int i=10; i < 100; i++)
std::vector.push_back(new T(i));
退出时,一个deletes 是向量的元素。如果T 中包含的数据也是一个指针,即使有好的析构函数,是否存在内存丢失的风险?例如
template<class M> class T{
M * Array;
public:
T(int i) : Array(new M[i]){ }
~T(){ delete Array;}
};
【问题讨论】:
-
为什么不在
T中使用矢量,省去自己处理Rule of Three 的麻烦?为什么不使用vector<T>来省去删除元素时删除元素的麻烦? -
所以,
T有一个M类型的底层数组,并且您将指向T的指针存储在std::vector中?为什么不直接使用std::vector<std::vector<M>>并避免所有不必要的手动内存管理? -
另外,如果您可以
emplace_back项目,您也将避免复制内容。 -
您到底想做什么?并且不要说存储指向包含指向数组的指针的类的指针向量。对于任何问题,这都是一个糟糕的解决方案,而不是你现在想解决的问题。
-
@rubenvb:从代码来看,OP 的目标是简单地拥有一个动态数组的动态数组,存储
M的实例,即std::vector<std::vector<M>>,但可能由于现有代码,卡住了使用T分配Ms 的C 数组。
标签: c++ pointers memory-management vector