J'ai des problèmes pour utiliser ma classe personnalisée avec une carte std :: map. La classe alloue dynamiquement de la mémoire pour les membres, et je ne veux pas utiliser de pointeur dans la map car je veux m'assurer que la classe s'occupe de supprimer toute la mémoire allouée. Mais le problème que j'ai est après avoir ajouté un élément à la carte, quand ce bloc de code sort de sa portée, le destructeur d'objets est appelé même s'il est toujours sur la carte. J'ai fait un faux code ci-dessous qui montre ce que je veux dire. La sortie est: Alors le problème est pourquoi le destructeur final est-il appelé? Merci d'avance et désolé pour la longue question.Pourquoi le constructeur de copie n'est-il pas appelé comme je l'espère ici en utilisant map?
Constructor Called Num:0034B7E8
Default Constructor Called Num:00000000
Copy Constructor Called Num:CCCCCCCC
Copy Constructor Called Num:CDCDCDCD
destructor called Num:CCCCCCCC
destructor called Num:00000000
destructor called Num:0034B7E8
Inserted Num:0034B7E8
class myClass
{
public:
myClass(int num)
{
mnNum = new int();
cout << "Constructor Called Num:" << mnNum << endl;
}
myClass() : mnNum(NULL)
{
cout << "Default Constructor Called Num:" << mnNum << endl;
}
myClass(const myClass ©)
{
mnNum = new int(copy.mnNum);
cout << "Copy Constructor Called Num:" << mnNum << endl;
}
~myClass()
{
delete mnNum;
mnNum = NULL;
}
int* mnNum;
};
map<string,myClass> mvMyMap;
void testFunction()
{
myClass lcObj(1);
mvMyMap["Test"] = lcObj;
}
int _tmain(int argc, _TCHAR* argv[])
{
testFunction();
cout << "Inserted Num:" << mvMyMap["Test"].mnNum << endl;
return 0;
}
Plase, code post-réel. Votre code actuel est faux. Il ne compilera pas au moins à l'instruction 'mnNum = new int (copy.mnNum)'. – AnT