Minha classe herda de várias bases, uma das quais é std::enable_shared_from_this
. Deve ser a primeira base?
Suponha o seguinte código de exemplo:
struct A { ~A(); };
struct B { ~B(); };
struct C : A, B, std::enable_shared_from_this<C> {};
std::make_shared<C>();
Quando ~A()
e ~B()
executar, posso ter certeza de que o armazenamento onde C
morava ainda está presente?
enable_shared_from_this
deve ser uma base inequívoca acessível. No meu exemplo, é. C
é uma estrutura. Herda publicamente.
class
e public
. Eu escolhi struct
o exemplo para evitar digitar.
~weak_ptr();
Efeitos: destrói este weak_ptr
objeto, mas não tem efeito no objeto para o qual o ponteiro armazenado aponta." Ênfase minha.
shared_ptr
morre. Mesmo que isso weak_ptr
evite que o bloco de controle seja desalocado, acho que não importa.
std::enable_shared_from_this
não faz muito. Seu exemplo parece bom para mim (supondo que você não esteja tentando fazer algo inteligente~A
e~B
, comothis
C*