Re: Объясните поведение std::map
От: crable США  
Дата: 05.10.05 07:56
Оценка:
Здравствуйте, alander, Вы писали:

A>Есть следующий код:


A>#include <iostream>

A>#include <map>

A>class MainClass

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

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


A> int val;

A>};

A>int main(int argc, char **argv)

A>{
A> std::map<int,MainClass> mainmap;

A> std::cerr << "mainmap[0]\n";

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

A>Который выводит на экран следующее:

A>mainmap[0]
A>MainClass()
A>~MainClass()
A>~MainClass()
A>mainmap[0].print()
A>MainClass()
A>~MainClass()
A>~MainClass()
A>value = 0
A>return 0
A>~MainClass()

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

А ты добавь в MainClass вот это:

MainClass(MainClass const &other): val(other.val) { std::cerr<< "MainClass(other)\n"; }
The last good thing written in C was Franz Schubert's Symphony No. 9.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.