#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;
}
Ricevo l'eccezione std::bad_weak_ptr
quando si chiama shared_from_this()
. È di progettazione? Sì, potrebbe essere pericoloso in quanto questo puntatore non può essere utilizzato dopo il ritorno del distruttore, ma non vedo una ragione per cui sarebbe tecnicamente impossibile ottenere il puntatore qui, poiché l'oggetto puntatore condiviso ovviamente esiste ancora e può essere Usato. C'è un modo per aggirare questo, a meno di scrivere il mio analogo enable_shared_from_this
(che preferirei non fare)?std :: enable_shared_from_this: è consentito chiamare shared_from_this() in destructor?
http://stackoverflow.com/q/8501503/1147772 – Drax
@Drax: ho visto quella domanda. Riguarda 'boost' e non' std', e le risposte parlano del design specifico del codice in questione piuttosto che delle principali limitazioni sulla 'shared_from_this()' availability. –
@VioletGiraffe La domanda non riguarda né 'boost' né' std', ma solo il concetto di riferimento debole. – curiousguy