Clase System::SmartPtr

SmartPtr class

Clase de puntero para envolver tipos que se asignan en el heap. Úsela para gestionar la memoria de clases que heredan de Object. Este tipo de puntero sigue la semántica de punteros intrusivos. El contador de referencias se almacena ya sea en el propio Object o en una estructura de contador que está estrechamente vinculada a la instancia de Object. En cualquier caso, todas las instancias de SmartPtr forman un único grupo de propiedad, independientemente de cómo se hayan creado, lo que difiere del comportamiento de la clase std::shared_ptr. Convertir un puntero crudo a SmartPtr es seguro siempre que existan otras instancias de SmartPtr que mantengan referencias compartidas al mismo objeto. Una instancia de la clase SmartPtr puede estar en uno de dos estados: puntero compartido y puntero débil. Para mantener vivo el objeto, debe haber un recuento positivo de referencias compartidas hacia él. Tanto los punteros débiles como los compartidos pueden usarse para acceder al objeto apuntado (para llamar métodos, leer o escribir campos, etc.), pero los punteros débiles no participan en el recuento de referencias del puntero compartido. El Object se elimina cuando el último puntero ‘shared’ SmartPtr a él es destruido. Por lo tanto, asegúrese de que esto no ocurra cuando no existan otros punteros SmartPtr compartidos al objeto, por ejemplo durante la construcción o destrucción del objeto. Use los objetos centinela System::Object::ThisProtector (en código C++) o los atributos CppCTORSelfReference o CppSelfReference (en código C# traducido) para solucionar este problema. De manera similar, asegúrese de romper referencias cíclicas usando la clase de puntero System::WeakPtr o el modo de puntero System::SmartPtrMode::Weak (en código C++) o el atributo CppWeakPtr (en código C# traducido). Si dos o más objetos se referencian mutuamente usando punteros ‘shared’, nunca se eliminarán. Si el tipo de puntero (débil o compartido) debe cambiarse en tiempo de ejecución, use el método System::SmartPtr::set_Mode() o la clase System::DynamicWeakPtr. La clase SmartPtr no contiene métodos virtuales. Sólo debe heredarse si está creando su propia estrategia de gestión de memoria. Este tipo es un puntero para gestionar la eliminación de otro objeto. Debe asignarse en la pila y pasarse a funciones ya sea por valor o por referencia constante.

template<class T>class SmartPtr
ParámetroDescripción
TTipo del objeto apuntado. Debe ser System::Object o una subclase de este.

Métodos

MétodoDescripción
begin()Accesor del método begin() de una colección subyacente. Sólo se compila si SmartPtr_ es un tipo de especialización con el método begin().
begin() constAccesor del método begin() de una colección subyacente. Sólo se compila si SmartPtr_ es un tipo de especialización con el método begin().
Cast() constConvierte el puntero a su propio tipo.
Cast() constConvierte el puntero al tipo base usando static_cast.
Cast() constConvierte el puntero al tipo derivado usando dynamic_cast.
Cast() constConvierte el puntero al tipo derivado usando dynamic_cast.
cbegin() constAccesor del método cbegin() de una colección subyacente. Sólo se compila si SmartPtr_ es un tipo de especialización con el método cbegin().
cend() constAccesor del método cend() de una colección subyacente. Sólo se compila si SmartPtr_ es un tipo de especialización con el método cend().
const_pointer_cast() constConvierte el puntero a un tipo diferente usando const_cast sobre el objeto apuntado.
dynamic_pointer_cast() constConvierte el puntero a un tipo diferente usando dynamic_cast sobre el objeto apuntado.
end()Accesor del método end() de una colección subyacente. Sólo se compila si SmartPtr_ es un tipo de especialización con el método end().
end() constAccesor del método end() de una colección subyacente. Sólo se compila si SmartPtr_ es un tipo de especialización con el método end().
get() constObtiene el objeto apuntado.
get_Mode() constObtiene el modo del puntero.
get_shared() constObtiene el objeto apuntado, pero afirma que el puntero está en modo compartido.
get_shared_count() constObtiene el número de punteros compartidos existentes al objeto referenciado, incluido el actual. Afirma que el puntero actual está en modo compartido.
GetHashCode() constLlama a GetHashCode() en el objeto apuntado.
GetObjectNotNull() constObtiene el objeto referenciado actualmente (si lo hay) o lanza una excepción.
GetObjectOrNull() constObtiene el objeto apuntado (si lo hay) o nullptr. Igual que get().
GetObjectOwner() constObtiene el objeto referenciado.
GetPointer() constObtiene el objeto apuntado (si lo hay) o nullptr. Igual que get().
Is(const System::TypeInfo&) constComprueba si el objeto apuntado es de un tipo específico o de su tipo hijo. Sigue la semántica ‘is’ de C#.
IsAliasingPtr() constComprueba si el puntero apunta a otro objeto distinto al propio (creado por un constructor de alias).
IsShared() constComprueba si el puntero está en modo compartido.
IsWeak() constComprueba si el puntero está en modo débil.
explicit operator bool() constComprueba si el puntero no es nulo.
operator!() constComprueba si el puntero es nulo.
operator*() constObtiene una referencia al objeto apuntado. Afirma que el puntero no es nulo.
operator->() constPermite acceder a los miembros del objeto referenciado.
operator<(Y *) constProporciona semántica de comparación menor para la clase SmartPtr.
operator<(SmartPtr<Y> const&) constProporciona semántica de comparación menor para la clase SmartPtr.
operator=(SmartPtr_&&)Asigna por movimiento el objeto SmartPtr. x queda inutilizable.
operator=(const SmartPtr_&)Asigna por copia el objeto SmartPtr.
operator=(const SmartPtr<Q>&)Asigna por copia el objeto SmartPtr. Realiza las conversiones de tipo necesarias.
operator=(Pointee_ *)Asigna un puntero crudo al objeto SmartPtr.
operator=(std::nullptr_t)Establece el valor del puntero a nullptr.
operator==(std::nullptr_t) constComprueba si el puntero apunta a nullptr.
operator[](IdxType) constAccesor para los elementos del arreglo. Solo compila si SmartPtr_ es una especialización de System::Array.
RemoveAliasing() constElimina el alias (creado por un constructor de alias) del puntero, asegurándose de que gestione (si es compartido) o rastree (si es débil) el mismo objeto al que apunta.
reset(Pointee_ *)Establece el objeto apuntado.
reset()Hace que el puntero apunte a nullptr.
set_Mode(SmartPtrMode)Establece el modo del puntero. Puede alterar los contadores de referencia del objeto referenciado.
SetContainedTemplateWeakPtr(uint32_t) constLlama al método SetTemplateWeakPtr() en el objeto apuntado (si lo hay).
SmartPtr(SmartPtrMode)Crea un objeto SmartPtr del modo requerido.
SmartPtr(std::nullptr_t, SmartPtrMode)Crea un objeto SmartPtr de puntero nulo del modo requerido.
SmartPtr(Pointee_ *, SmartPtrMode)Crea un SmartPtr que apunta al objeto especificado, o convierte un puntero crudo a SmartPtr.
SmartPtr(const SmartPtr_&, SmartPtrMode)Construye por copia un objeto SmartPtr. Ambos punteros apuntan al mismo objeto después.
SmartPtr(const SmartPtr<Q>&, SmartPtrMode)Construye por copia un objeto SmartPtr. Ambos punteros apuntan al mismo objeto después. Realiza conversión de tipo si está permitido.
SmartPtr(SmartPtr_&&, SmartPtrMode)Construye por movimiento un objeto SmartPtr. Efectivamente, intercambia dos punteros, si ambos son del mismo modo. x puede quedar inutilizable después de la llamada.
explicit SmartPtr(const SmartPtr<Array<Y>>&, SmartPtrMode)Convierte el tipo del arreglo referenciado creando un nuevo arreglo de tipo diferente. Útil si en C# hay una conversión de tipo de arreglo que no es compatible en C++.
explicit SmartPtr(const Y&)Inicializa un arreglo vacío. Utilizado para traducir algunas construcciones de código C#.
SmartPtr(const SmartPtr<P>&, Pointee_ *, SmartPtrMode)Construye un SmartPtr que comparte la información de propiedad con el valor inicial de ptr, pero contiene un puntero no relacionado y no administrado p.
static_pointer_cast() constConvierte el puntero a un tipo diferente usando static_cast en el objeto apuntado.
ToObjectPtr() constConvierte cualquier tipo de puntero a un puntero a Object. No requiere que el tipo Pointee_ esté completo.
static Type()Acceso rápido para obtener el objeto System::TypeInfo del tipo Pointee_.
~SmartPtr()Destruye el objeto SmartPtr. Si es necesario, disminuye el contador de referencias del objeto apuntado y elimina el objeto.

Typedefs

TypedefDescripción
ArrayTypeLo mismo que Pointee_, si es una especialización de System::Array, y void en caso contrario.
Pointee_Tipo apuntado.
SmartPtr_Tipo de puntero inteligente especializado.
ValueTypeTipo de almacenamiento del arreglo apuntado. Solo tiene sentido si T es una especialización de System::Array.

Ver también