Ich habe eine Situation wie folgt aus:Re-assinging eine "auto_ptr" und Speicher verwalten
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
}
};
Gibt es eine Möglichkeit, dies zu erreichen? Wird der folgende Code tun, was ich will?
void MyClass::reassignMyOtherClass()
{
// ... still, do more funny stuff (flashback humor :-)
MyOtherClass new_other_class = new MyOtherClass();
obj.reset(new_other_class);
}
Wird die Erinnerung an new_other_class
in der Standard-Destruktor MyClass
de zugewiesen werden?
Mykola, danke! Ich bin so an Java gewöhnt, dass ich die Initialisierungsliste des Konstruktors abstoßend finde, als ob ich nicht traue, dass er die richtigen Werte zuweist :) Eine Frage allerdings: Können wir die Initialisierungsliste verwenden, selbst wenn das Objekt den Kopieraufbau nicht erlaubt? Vielleicht traue ich deshalb nicht :) – Srikanth
Es verwendet keinen Kopierkonstruktor. Es verwendet Konstruktor. –