这是我第一次使用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 中的其他容器,但我没有检查它们)。
任何帮助表示赞赏。