Ho trovato un fatto molto pregiudizievole sulle mappe di stl. Per qualche motivo, non posso ottenere che gli oggetti vengano inseriti nella mappa per essere costruiti/distrutti una sola volta.come ottenere la mappa di stl per costruire/distruggere l'oggetto inserito solo una volta
Esempio:
struct MyObject{
MyObject(){
cout << "constructor" << endl;
}
~MyObject(){
cout << "destructor" << endl;
}
};
int main() {
std::map<int, MyObject> myObjectsMap;
myObjectsMap[0] = MyObject();
return 0;
}
rendimenti:
constructor
destructor
destructor
constructor
destructor
se faccio:
typedef std::pair<int, MyObject> MyObjectPair;
myObjectsMap.insert(MyObjectPair(0,MyObject()));
restituisce:
constructor
destructor
destructor
destructor
Sto inserendo oggetti responsabili della propria allocazione di memoria, quindi quando vengono distrutti si puliscono da soli, essendo distrutti più volte mi stanno creando dei problemi.
apparentemente, 'std :: map' non offre un'interfaccia non di copia per la creazione di nuove voci. Consiglierei i puntatori condivisi qui - 'std :: map >' –