Объясните поведение std::map
От: alander  
Дата: 05.10.05 07:44
Оценка:
Есть следующий код:

#include <iostream>
#include <map>

class MainClass
{
public:
MainClass():val(0) { std::cerr << "MainClass()\n"; };
~MainClass() { std::cerr << "~MainClass()\n"; };

void print() { std::cerr << "value = " << val << "\n"; };

int val;
};

int main(int argc, char **argv)
{
std::map<int,MainClass> mainmap;

std::cerr << "mainmap[0]\n";
mainmap[0];
std::cerr << "mainmap[0].print()\n";
mainmap[0].print();
std::cerr << "return 0\n";
return 0;
}

Который выводит на экран следующее:
mainmap[0]
MainClass()
~MainClass()
~MainClass()
mainmap[0].print()
MainClass()
~MainClass()
~MainClass()
value = 0
return 0
~MainClass()

Вопрос такой: откуда берутся дестркуторы после вызовов mainmap[0] и mainmap[0].print(), почему их по 2? И вообще, почему количество деструкторов != количеству конструкторов?!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.