enable_shared_from_this (Clase)

 

Publicado: octubre de 2016

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

Ayuda a generar un shared_ptr.

clase enable_shared_from_this {
público:
shared_ptr<Ty >
shared_from_this();
shared_ptr<const Ty > shared_from_this() const; protegido:
enable_shared_from_this(); enable_shared_from_this(const enable_shared_from_this&); enable_shared_from_this aspecto operador =(const enable_shared_from_this&); ~ enable_shared_from_this(); };

Parámetros

Ty
Tipo controlado por el puntero compartido.

Objetos derivados de enable_shared_from_this puede utilizar el shared_from_this métodos en las funciones miembro para crear shared_ptr los propietarios de la instancia que comparten la propiedad existente shared_ptr propietarios. En caso contrario, si crea un nuevo shared_ptr utilizando this, es distinta de la existente shared_ptr propietarios, lo que pueden provocar un no válido de referencias o el objeto se puede eliminar más de una vez.

Los constructores, el destructor y el operador de asignación están protegidos para evitar el mal uso accidental. El tipo de argumento de plantilla Ty debe ser del tipo de la clase derivada.

Para obtener un ejemplo de uso, consulte enable_shared_from_this::shared_from_this.

Encabezado:<>>

Espacio de nombres: std

Genera un shared_ptr que comparta la propiedad de la instancia existente shared_ptr propietarios.

shared_ptr<T> shared_from_this();

shared_ptr<const T> shared_from_this() const;

Comentarios

Al derivar de objetos desde el enable_shared_from_this de la clase base la shared_from_this funciones miembro de plantilla devuelven un shared_ptr (clase) objeto que comparta la propiedad de la instancia existente shared_ptr propietarios. En caso contrario, si crea un nuevo shared_ptr de this, es distinta de la existente shared_ptr propietarios, lo que pueden provocar un no válido de referencias o el objeto se puede eliminar más de una vez. El comportamiento es indefinido si se llama a shared_from_this en una instancia que ya no pertenece a un shared_ptr objeto.

Ejemplo

// std_memory_shared_from_this.cpp   
// compile with: /EHsc   
#include <memory>  
#include <iostream>  
  
using namespace std;  
  
struct base : public std::enable_shared_from_this<base>  
{  
    int val;  
  
    shared_ptr<base> share_more()  
    {  
        return shared_from_this();  
    }  
};  
  
int main()  
{  
    auto sp1 = make_shared<base>();  
    auto sp2 = sp1->share_more();  
  
    sp1->val = 3;  
    cout << "sp2->val == " << sp2->val << endl;  
  
    return 0;  
}   

sp2->val == 3  

enable_shared_from_this::shared_from_this
shared_ptr (clase)

Mostrar: