デストラクタは、使用std::map
時に要素に対して呼び出されstd::map::clear
ますか?
デバッグしようとしましたが、デストラクタが呼び出されるのstd::map<string,string>
を確認できませんでした。std::string
誰でも私の理解を助けることができますか?
ドキュメントには呼び出されると記載されていますが、私はそれに気づきませんでした。
ドキュメンテーションは正しく、呼び出されます。
破棄はメソッドによって行われstd::allocator<T>::deallocate()
ます。デバッガーでそれをトレースします。
デストラクタが呼び出されます。以下に例を示します。
#include <iostream>
#include <map>
class A
{
public:
A() { std::cout << "Constructor " << this << std::endl; }
A(const A& other) { std::cout << "Copy Constructor " << this << std::endl; }
~A() { std::cout << "Destructor " << this <<std::endl; }
};
int main()
{
std::map<std::string, A> mp;
A a;
mp.insert(std::pair<std::string, A>("hello", a));
mp.clear();
std::cout << "Ending" << std::endl;
}
これにより、次のような出力が報告されます。
Constructor 0xbf8ba47a
Copy Constructor 0xbf8ba484
Copy Constructor 0xbf8ba48c
Copy Constructor 0x950f034
Destructor 0xbf8ba48c
Destructor 0xbf8ba484
Destructor 0x950f034
Ending
Destructor 0xbf8ba47a
したがって、クリア関数を呼び出すことによってデストラクタが呼び出されることがわかります。
whereとはstd::map<A,B>
、ブレークポイントを設定したデストラクタを持つカスタム タイプです。それが呼び出されることがわかり、この破壊が正確にどのスコープで発生するかがわかります。A
B