Supposons que j'ai deux conteneurs, contenant des pointeurs sur des objets, qui partagent certains de leurs éléments. de http://www.cplusplus.com/reference/stl/list/erase/ il est dit que:Conteneurs STL, supprimez un objet de deux conteneurs
Cela réduit efficacement la taille de la liste par le nombre d'éléments supprimés, appelant la destructor de chaque élément avant.
Comment puis-je supprimer un objet de deux conteneurs sans appeler le destructor deux fois:
exemple
#include <map>
#include <string>
using namespace std;
//to lazy to write a class
struct myObj{
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(object->pkid,object);
container2.insert(object->pkid,object);
//removing object from container1
container1.erase(object->pkid);
//object descructor been called and container2 now hold invalid pointer
//this will call try to deallocate an deallocated memory
container2.erase(object->pkid);
}
s'il vous plaît conseiller
En fait, le destructeur d'objet n'est pas appelé du tout; 'effacer 'supprime simplement le pointeur de la carte. Si la carte contient des objets plutôt que des pointeurs, alors ils appellent leurs destructeurs. –