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 Cmorava ainda está presente?
enable_shared_from_thisdeve ser uma base inequívoca acessível. No meu exemplo, é. Cé uma estrutura. Herda publicamente.
classe public. Eu escolhi structo exemplo para evitar digitar.
~weak_ptr(); Efeitos: destrói este weak_ptrobjeto, mas não tem efeito no objeto para o qual o ponteiro armazenado aponta." Ênfase minha.
shared_ptrmorre. Mesmo que isso weak_ptrevite que o bloco de controle seja desalocado, acho que não importa.
std::enable_shared_from_thisnão faz muito. Seu exemplo parece bom para mim (supondo que você não esteja tentando fazer algo inteligente~Ae~B, comothisC*