Passando isso como um ponteiro cru viola a restrição ao passar os ponteiros crus e compartilhados para o mesmo bloco de memória, tornando o ponteiro compartilhado inútil. Há também outro método para executar a mesma funcionalidade fornecida pelo enable_shared_from_sta classe. Mas esse método envolve o elenco dinâmico.
Ele fornece as seguintes funções de membro:
Construtor nos permite construir um objeto.
Destruidores Permita -nos destruir o objeto.
Operador “=”nos permite retornar a referência a "este" ponteiro.
Shared_from_this é usado para devolver o ponteiro compartilhado que compartilha a propriedade de "*this" ponteiro.
Fracos_from_this Retorna a propriedade do ponteiro fraco que compartilha a propriedade com o ponteiro "*this".
Sintaxe:
modeloO mostrado anteriormente é a sintaxe para o Enable_shared_from_sta classe base. T indica o tipo de classe que precisa ser definido nesta sintaxe.
Exemplo 1:
Agora, tentamos um exemplo para a classe Enable_shared_from_ desta classe para verificar seu funcionamento e como ela é implementada. Vamos primeiro incluir nossos arquivos de cabeçalho. O primeiro é a "memória". O segundo é o "iostream". A memória é usada para permitir que o codificador realize as várias operações que são como alocação da heap de memória. O segundo é "iostream", onde é usado para permitir as operações de entrada e saída que são executadas no código para exibir os dados desejados para mostrar. Agora, usando a estrutura, definimos um objeto chamado "shrd_class". Declaramos nossa classe base "Enable_shared_from_This" para a qual passamos o "shrd_class". Isso significa que o objeto é uma classe base de enable_shared_from_this.
A estrutura é a maneira de agrupar as várias variáveis relacionadas em um só lugar. No nosso caso, reunimos as variáveis do ponteiro em uma classe que é "obj". Dentro do objeto, primeiro chamamos um construtor ou o objeto "shrd_class". Em seguida, declaramos uma função get_class () do ponteiro compartilhado do tipo "shrd_class", que exibe a mensagem "Propriedade compartilhada" quando a função "get_class" é chamada e retorna o método shared_from_this fornecido pela classe Enable_shared_from_this que ingere o objeto para gerar as instâncias do ponteiro compartilhado.
Agora, seguimos para a nossa principal função na qual declaramos um ponteiro compartilhado do objeto do tipo "shrd_class", ao qual nomeamos "pf1". Alocamos o ponteiro "shrd_class" usando a nova palavra -chave na pilha de memória. Em seguida, declaramos uma variável "pf2" do tipo automático ao qual atribuímos o "get_class ()" usando o ponteiro compartilhado "pf1". O operador “->” que usamos nesta linha significa que estamos acessando a função de membro de qualquer objeto, seja de uma união, estrutura, etc. usando o ponteiro. Neste exemplo, acessamos o método get_class () da classe de estrutura "Obj" usando o ponteiro "pf1".
#incluirAgora, ansioso pela nossa saída, exibimos com sucesso a mensagem, o que significa que o "PF1" é a instância do objeto "shrd_class" e compartilha a propriedade. Podemos ver isso na captura de tela que é exibida no seguinte:
Exemplo 2:
Vamos realizar outro exemplo no qual criamos dois ponteiros compartilhados que compartilham sua propriedade. Agora, vamos prosseguir para o nosso seguinte código exibido. Primeiro declaramos os arquivos de cabeçalho "iostream" e o arquivo de cabeçalho "Memory". Depois disso, declaramos um enable_shared_from_ desta classe base denominada "obj" usando estruturas. Agora, passamos para a nossa principal função, onde executamos o compartilhamento do objeto entre dois ponteiros compartilhados diferentes. Dentro da função principal, declaramos um ponteiro compartilhado chamado "shrd_ptr_1" e o segundo "shrd_ptr_2" do tipo "obj". Na próxima linha para o ponteiro "shrd_ptr_1", atribuímos o método "make_shared () que é usado para alocar um objeto do tipo" Obj "e retornar o objeto shared_ptr.
Em seguida, atribuímos nosso segundo ponteiro compartilhado_from_this (), que nos permite retornar o ponteiro que compartilha a propriedade do ponteiro "*this". Nisso, o "shrd_ptr_1" compartilha sua propriedade com o "shrd_ptr_2". Depois disso, usamos a declaração if () na qual passamos duas condições. O primeiro “shrd_ptr_1.proprietário_before (shrd_ptr_2) ”Neste proprietário_before é a função de membro que retorna o valor booleano true ou falso se este ponteiro compartilhado for ordenado antes do ponteiro passado.
No nosso caso, ele verifica se o "shrd" ptr_1 "é ordenado antes do" shrd_ptr_2 "ou não. A segunda condição é vice -versa. Nele, verificamos se o "shrd_ptr_2" é menor ou ordenado antes do "shrd_ptr_1". Se essas duas condições não ocorrerem, ela se move dentro da instrução if () e exibe a mensagem "shrd_ptr_1 e" shrd_ptr_2 "e compartilhe a propriedade. No final, retornamos o valor nulo, o que significa que o código é executado com sucesso sem nenhum erro.
#incluirComo podemos ver na saída do código fornecido, ele exibe a mensagem com sucesso. Isso significa que a propriedade entre os dois ponteiros compartilhados “shrd_ptr_1” e os “shrd_ptr_2” são compartilhados com sucesso usando o Enable_shared_from_this Base Class e suas funções de membro.
Conclusão
Neste tutorial, descrevemos os métodos sobre como usar a classe Enable_shared_from_sta. Tentamos o nosso melhor para explicar o enable_shared_from_sta classe. Esperamos que este artigo seja útil para você entender melhor.