Попытка понять, почему мультикарты конструируют / удаляют, как это делает - PullRequest
1 голос
/ 13 февраля 2012

Сначала у меня есть распечатка всех «адресов».То, что я пытаюсь понять, это то, почему это выделяется в то время.Я построил мультикарту со строкой и объектом, в конструкторе и деструкторе этого объекта у меня есть распечатка, когда они вызываются.

Первый вопрос: это копирование объекта?Второй вопрос: почему я вижу больше деструкторов, чем конструкторов?Третий вопрос: я никогда не получал адрес, указанный в конструкторе, который мы видим ниже (последние 5)

Спасибо за помощь в понимании этой конструкции / разрушения в мультикарте .

Oliver

    std::multimap <string, TestObject> m;

for(int i = 0; i < 5 ;i++){

    TestObjectone("test", i);

    m.insert(pair<string, TestObject>(("a" + i), one));
    cout << "Single Iteration" <<  i << endl;

}

Конструктор параметра test0 0x22ff24 Деструктор называется TestObject: test0 0x22ff08
Деструктор вызывается TestObject: test0 0x22ff18
Одиночная итерация0
Деструктор называется TestObject: test0 0x22ff24 * 1015Конструктор параметров test1 0x22ff24
Деструктор называется TestObject: test1 0x22ff08
Деструктор вызывается TestObject: test1 0x22ff18
Одиночная итерация1
Деструктор вызывается TestObject: test1 0x22ff24
Конструктор параметров 2 2 0x22ff Деструктор тест2 1021называется TestObject: test2 0x22ff08
Деструктор называется TestObject: test2 0x22ff18
Одиночная итерация2
Деструктор называется TestObject: test2 0x22ff24
Конструктор параметров test3 0x22ff24
Деструктор * называется TestObjectff 10 10xx0: test3* ДеStructor называется TestObject: test3 0x22ff18
Одиночная итерация3
Деструктор называется TestObject: test3 0x22ff24
Конструктор параметров test4 0x22ff24
Деструктор называется TestObject: test4 0x22ff08
Деструктор * называется TestObject18 test0bx18: test1033 * Одиночная итерация4
Деструктор называется TestObject: test4 0x22ff24

Деструктор называется TestObject: test4 0x482f6c
Деструктор называется TestObject: test3 0x482efc
Деструктор называется TestObject: test0 0392Деструктор называется TestObject: test2 0x482e8c
Деструктор называется TestObject: test1 0x482e1c

1 Ответ

4 голосов
/ 13 февраля 2012

Первый вопрос: да, STL-контейнер имеет значение семантическое и ваши объекты копируются.

Второй вопрос: вероятно, потому что ваш конструктор копирования не имеет отладочных отпечатков. Если вы не внедрили свой собственный, сделанный на заказ copy-ctor, то будут использоваться copy-ctr по умолчанию.

Третий вопрос: Вы видите вызовы деструкторов сконструированных объектов копирования (как также упоминает jkrok в комментариях)

...