⚪ Juntamente com a função de retorno: shared_from_this();
std::enable_shared_from_this é uma funcionalidade em C++, adicionada a partir do C++11, que permite a uma classe criar instâncias compartilhadas shared_ptr dela mesma.
Esse mecanismo é útil quando você precisa criar um shared_ptr dentro de um método da própria classe, especialmente para evitar duplicação e manter a contagem de referências correta.
Utilização
Antes de mais nada sua classe precisa herdar publicamente(std::enable_shared_from_this<T>) para o tipo da sua classe, exemplo:
A função-membro dessa classe que possui tipo de retorno: shared_ptr não mais retornará *this e sim shared_from_this(), exemplo:
O uso de *this não é adequado, pois não incrementa a contagem de referências do shared_ptr;
O uso de *this pode levar a problemas de gerenciamento de memória e possíveis dangling pointers(ou wild pointers, não apontam para locais adequados);
O uso de *this é somente adequado para ponteiros brutos e referências.
Exemplos
Suponhamos que você possui esse código que soma e incrementa membros de uma classe, assim como vimos nesse vídeo:
Note que a class Vector2 possui uma função-membro: increment que é uma referência para ela mesma e retorna um *this!
Traduzindo esse código para uso de std::enable_shared_from_this, ficaria assim:
Note que herdamos publicamente: std::enable_shared_from_this e o tipo de increment agora é std::shared_ptr e retorna: shared_from_this().
A partir desse código temos gerenciamento automático de referências e podemos até contá-las, exemplo:
Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!