使用するのは初めてで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
。関数はありますが、コンテナーのサイズを 0 に減らすと主張していclear
ますが、必ずしもその下のメモリの割り当てを解除するとは限りません。ベクトルの場合も同じです(STLの他のコンテナだと思いますが、チェックしていません)。
どんな助けでも感謝します。