У меня есть этот код:Как деструкторы значений std :: map call value?
#include <iostream>
#include <map>
using namespace std;
class test{
public:
test() {
cout << "calling test ctor " << endl;
}
~test() {
cout << "calling test dtor " << endl;
}
void callme(){
cout << "call me " << endl;
}
};
int main() {
map<int, test> mp;
mp[0].callme();
mp[0].callme();
return 0;
}
Вывод этой программы является:
calling test ctor
calling test dtor
calling test dtor
call me
call me
calling test dtor
Я нахожусь немного запутался, как станд :: карта обработки теста :: ctors и dtors здесь.
Перед выполнением этого кода, мое предположение было, что тр [0] .callme() будет создавать новый объект test
и вызвать callme()
по этому поводу, и если мы называем тр [0] .callme() еще раз, то он должен call test :: dtor (поскольку мы заменяем ключ 0
здесь), а затем test :: ctor, чтобы создать новый объект test
, чтобы он мог вызвать callme()
. Очевидно, мое предположение здесь неверно, потому что вывод не совпадает вообще.
Не мог бы кто-нибудь пролить свет на это?
EDIT1:
НКУ --version = ССАГПЗ (GCC) 5.1.1 20150422 (Red Hat 5.1.1-1)
Команда компиляции:
g++ maps.cpp
Итак, никаких флагов с g ++. Простая компиляция.
Вы забыли указать конструктор копирования. –
Я не уверен, как вы получили этот результат. запуск кода [здесь] (http://coliru.stacked-crooked.com/a/8e05917741e4afef) дает правильный результат. – NathanOliver
Назовите компилятор и версию. – 101010