J'ai une situation comme celle-ci:Re-assinging un "auto_ptr" et gérer la mémoire
class MyClass
{
private:
std::auto_ptr<MyOtherClass> obj;
public:
MyClass()
{
obj = auto_ptr<MyOtherClass>(new MyOtherClass());
}
void reassignMyOtherClass()
{
// ... do funny stuff
MyOtherClass new_other_class = new MyOtherClass();
// Here, I want to:
// 1) Delete the pointer object inside 'obj'
// 2) Re-assign the pointer object of 'obj' to 'new_other_class'
// so that 'obj' now manages 'new_other_class' instead of the
// object that just got deleted manually
}
};
Yat-il un moyen d'y parvenir? Est-ce que le code suivant fera ce que je veux?
void MyClass::reassignMyOtherClass()
{
// ... still, do more funny stuff (flashback humor :-)
MyOtherClass new_other_class = new MyOtherClass();
obj.reset(new_other_class);
}
Est-ce que la mémoire de new_other_class
être désallouée dans le destructor par défaut de MyClass
?
Mykola, merci! Je suis tellement habitué à Java que je trouve la liste d'initialisation du constructeur répulsive, comme si je ne crois pas qu'elle assigne les bonnes valeurs :) Une question cependant: pouvons-nous utiliser la liste d'initialisation même si l'objet interdit la construction de la copie? Peut-être est-ce la raison pour laquelle je ne fais pas confiance à ceci :) – Srikanth
Il n'utilise pas de constructeur de copie. Il utilise le constructeur. –