std :: map :: clear и элементы деструкторы

Деструктор вызывается std::map элементы, когда std::map::clear используется?

Я пытался отладить для std::map<string,string> но не мог видеть std::string деструктор вызывается. Может ли кто-нибудь помочь мне понять?

Документация гласит, что его вызывают, но я не мог этого заметить.

4

Решение

Документация верна, она вызывается.

Уничтожение будет сделано методом std::allocator<T>::deallocate(), Проследите это в вашем отладчике.

http://www.cplusplus.com/reference/std/memory/allocator/

4

Другие решения

Деструктор вызывается. Вот пример для иллюстрации:

#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.

4

попробуй с std::map<A,B> где A а также B являются пользовательскими типами, у которых есть деструктор, в котором вы установили точку останова. Вы увидите, что он вызывается, и именно в каком масштабе происходит это разрушение.

0
По вопросам рекламы [email protected]