【发布时间】:2021-12-16 05:17:32
【问题描述】:
我写了一个类vector,它的成员是一个动态分配的数组
template <typename T> struct vector{
T* elem;int capacity;
/*
*capacity is the size of array, not number of elements in the array .
*the default capacity is 3.
*/
vector(int c=3,T e=0){ /* initializing all elements as e */
T* elem=new T[capacity = c];
for(int i=0;i<capacity;i++){
elem[i]=e;
}
}
~vector(){
delete[] elem;
}
};
现在是重点,关于vector 的析构函数。如果成员elem中的元素也是动态分配的对象obj,并且这个对象也有自己的析构函数
int main(){
vector<obj*> vec;
vec.elem[0] = new obj(parameter)
vec.elem[1] = new obj(parameter)
vec.elem[2] = new obj(parameter)
...
}
deletevector的析构函数中的所有对象都需要吗?像这样
~vector(){
for(int i=0;i<capacity;i++){
delete elem[i];
}
delete[] elem;
}
或者我应该只有delete[] elem 和obj 的析构函数来完成剩下的工作?
【问题讨论】:
-
只需在析构函数中放置一个断点或一些调试输出,然后观察会发生什么。在相关说明中,您的 C++ 教程是否包含有关
new和delete配对的规则? -
使用
vector<std::unique_ptr<obj>> -
如果您不能使用标准库(出于某种原因),请创建自己的
unique_ptr与您的vector并排。你永远不应该拥有拥有原始指针的向量。 -
简单规则:你
new你也需要delete。除非有别的东西为你做。 -
我是 C++ 的初学者。由于我加入的数据结构课程的要求,我编写了自己的向量。禁止使用 STL。我相信我应该配对 new 和 delete 是真的,这是错的吗?谢谢,我会尝试调试看看结果:D
标签: c++ destructor