#include <memory>
#include <iostream>
struct A : public std::enable_shared_from_this<A>
{
~A()
{
auto this_ptr = shared_from_this(); // std::bad_weak_ptr exception here.
std::cout << "this: " << this_ptr;
}
};
int main()
{
auto a = std::make_shared<A>();
a.reset();
return 0;
}
Ich bekomme std::bad_weak_ptr
Ausnahme beim Aufruf shared_from_this()
. Ist es von Entwurf? Ja, es könnte gefährlich sein, da dieser Zeiger nicht verwendet werden kann, nachdem der Destruktor zurückkehrt, aber ich sehe keinen Grund, warum es technisch unmöglich wäre, den Zeiger hier zu bekommen, da das geteilte Zeigerobjekt offensichtlich noch existiert und sein kann benutzt. Gibt es eine Möglichkeit, dies zu umgehen, kurz, meine eigene enable_shared_from_this
Analog zu schreiben (was ich lieber nicht tun würde)?std :: enable_shared_from_this: Ist es erlaubt, shared_from_this() im Destruktor aufzurufen?
http://StackOverflow.com/Q/8501503/1147772 – Drax
@Drax: Ich habe diese Frage gesehen. Es betrifft "boost" und nicht "std", und die Antworten sprechen über das spezifische Design des fraglichen Codes und nicht über prinzipielle Einschränkungen für die Verfügbarkeit von "shared_from_this()". –
@VioletGiraffe Die Frage betrifft weder 'boost' noch' std', sondern nur das Konzept der schwachen Referenz. – curiousguy