【发布时间】:2013-05-23 19:00:05
【问题描述】:
这是我第一次使用STL,我对如何释放这些容器使用的内存感到困惑。例如:
class X {
private:
map<int, int> a;
public:
X();
//some functions
}
现在让我们说我将构造函数定义为:
X::X() {
for(int i=0; i<10; ++i) {
map[i]=i;
}
}
现在我的问题是我应该为这个类编写析构函数还是默认的 C++ 析构函数将负责释放内存(完全)?
现在考虑对上面的类进行修改
class X {
private:
map<int, int*> a;
public:
X();
~X();
//some functions
}
现在让我们说我将构造函数定义为:
X::X() {
for(int i=0; i<10; ++i) {
int *k= new int;
map[i]=k;
}
}
现在我明白,对于这样一个类,我需要编写一个析构函数,因为 new 分配的内存不能被map 容器的默认析构函数破坏(因为它调用对象的析构函数,在这种情况下是一个指针)。所以我尝试编写以下析构函数:
X::~X {
for(int i=0; i<10; ++i) {
delete(map[i]);
}
//to delete the memory occupied by the map.
}
不知道怎么删除map占用的内存。虽然有clear 函数,但它声称将容器的大小降低到0,但不一定释放下面的内存。向量也是如此(我猜是 STL 中的其他容器,但我没有检查它们)。
任何帮助表示赞赏。
【问题讨论】:
标签: c++ memory stl constructor destructor