Деструктор вызывается 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
Итак, вы можете видеть, что деструкторы вызываются вызовом функции clear.
попробуй с std::map<A,B>
где A
а также B
являются пользовательскими типами, у которых есть деструктор, в котором вы установили точку останова. Вы увидите, что он вызывается, и именно в каком масштабе происходит это разрушение.