class AutoSomething
{
public:
AutoSomething(Object& ob)
: object_(object)
{}
~AutoSomething()
{
object_.some_callback();
}
private:
Object& object_;
};
.........
void Object::some_function()
{
AutoSomething some(*this);
some_function_which_may_throw_exception();
}
Die Frage ist - wird der Zustand von Object in Ordnung sein, wenn der Destruktor von AutoSomething aufgerufen wird?Ist es sicher, RAII während des Abwickelns des Stapels zu verwenden?
Was meinst du, der Staat ist in Ordnung? Es stimmt, dass der dtor von 'AutoSomething' aufgerufen wird und dann' Object :: some_callback() 'aufgerufen wird. – songyuanyao
Wenn Sie eine Funktion in Ihrem Destruktor aufrufen, wird das Programm beendet. Normalerweise steuern Sie nicht, welche Callback-Funktionen das tun, deshalb würde ich vermeiden, Callbacks in einem Destruktor aufzurufen. – Galik
Ja, sie werden angerufen, aber ich bezweifelte, dass das Objekt zu diesem Zeitpunkt beschädigt sein könnte. – user1289