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, sin importar cómo fueron creadas, 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 el objeto vivo, debe haber un recuento positivo de referencias compartidas al mismo. Tanto los punteros débiles como los compartidos pueden usarse para acceder al objeto apuntado (para llamar a métodos, leer o escribir campos, etc.), pero los punteros débiles no participan en el recuento de referencias del puntero compartido. 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, p. ej. 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 corregir 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 entre sí 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 heredarla 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 especializado 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 especializado 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 especializado 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 especializado con el método cend().
const_pointer_cast() constConvierte el puntero a un tipo diferente usando const_cast en el objeto apuntado.
dynamic_pointer_cast() constConvierte el puntero a un tipo diferente usando dynamic_cast en el objeto apuntado.
end()Accesor del método end() de una colección subyacente. Sólo se compila si SmartPtr_ es un tipo especializado 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 especializado 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. Lo mismo que get().
GetObjectOwner() constObtiene el objeto referenciado.
GetPointer() constObtiene el objeto apuntado (si lo hay) o nullptr. Lo mismo 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 de ‘is’ de C#.
IsAliasingPtr() constComprueba si el puntero apunta a otro objeto distinto del que posee (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. Asegura que el puntero no sea 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. Sólo se 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 recuentos de referencias 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 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)Copia construye el objeto SmartPtr. Ambos punteros apuntan al mismo objeto después.
SmartPtr(const SmartPtr<Q>&, SmartPtrMode)Copia construye el objeto SmartPtr. Ambos punteros apuntan al mismo objeto después. Realiza conversión de tipo si está permitida.
SmartPtr(SmartPtr_&&, SmartPtrMode)Mueve construye el objeto SmartPtr. Efectivamente, intercambia dos punteros, si ambos están en el 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# existe una conversión de tipo de arreglo que no está soportada 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 p no relacionado y no administrado.
static_pointer_cast() constConvierte el puntero a un tipo diferente usando static_cast sobre el objeto apuntado.
ToObjectPtr() constConvierte cualquier tipo de puntero a un puntero a Object. No requiere que el tipo Pointee_ esté completo.
static Type()Atajo 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
ArrayTypeIgual 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