Если ваши контейнеры содержат указатели, то деструктор для этих объектов не будет вызываться (STL не будет следовать за этими указателями и вызывать деструктор объекта).
И наоборот, если ваши контейнеры удерживалисамих полноразмерных объектов, тогда будет вызван деструктор для этих объектов.
У вас также были некоторые синтаксические ошибки в объявлении карты и операторах вставки.Попробуйте запустить следующий код.Обратите внимание, что деструктор вызывается только один раз (для оператора delete). Деструктор никогда не вызывается для операторов стирания .
#include <map>
#include <string>
#include <iostream>
using namespace std;
//to lazy to write a class
struct myObj{
~myObj() {
cout << "DESTRUCTION" << endl;
}
string pkid;
string data;
};
map<string,myObj*> container1;
map<string,myObj*> container2;
int main()
{
myObj * object = new myObj();
object->pkid="12345";
object->data="someData";
container1.insert(pair<string,myObj*>(object->pkid,object));
container2.insert(pair<string,myObj*>(object->pkid,object));
//removing POINTER from container1
container1.erase(object->pkid);
//object's destructor has NOT been called yet
//removing POINTER from container2
container2.erase(object->pkid);
//object's destructor STILL hasn't been called
delete object; // DESTRUCTION!
}