Вызов деструктора при удалении / удалении объекта с карты - PullRequest
0 голосов
/ 22 мая 2019

У меня есть одно сомнение, у меня есть карта, которая хранит объект класса против некоторых произвольных строк, теперь, когда я удаляю любой элемент из карты (используя erase / remove api), будет ли вызываться деструктор объекта класса, хранящегося в этом элементе? Также, когда я вставляю объект класса, моя карта сопоставляется со строковым значением, вызывается ctor класса и создается копия объекта в карте. Правильно ли мое понимание здесь? Любые ссылки, объясняющие эти сценарии, будут полезны.

Будет ли ниже код вызывать конструктор копирования класса Myclass? Я попытался вставить cout в MyClass copy ctor, но не увидел его в выводе.

Примечание: объекты хранятся по значению на карте.

QMap<QString, MyClass> testMap;
MyClass obj;
testMap.insert("test", obj);
testMap.remove("test");

1 Ответ

1 голос
/ 22 мая 2019

Поскольку ваши объекты хранятся по значению, вы будете хранить новые экземпляры на карте.Это означает, что ctor будет вызываться во время вставки.На большинстве вставок будет использоваться ctor копирования / перемещения, но другой ctor может быть выбран с помощью методов emplace....И ctor по умолчанию используется, когда вы создаете default значения в векторе, давая ему начальный размер или расширяя его.

То же самое, когда объект удаляется или стирается с карты, он уничтожен, так что его дтор будет называться.В этом нет особой магии: здесь применяются обычные правила для времени жизни объекта.

...