¿Existe un "propietario en un paquete" adecuado para los "controladores" disponibles?

Asas tener una semántica adecuada que no sea punteros. Así que para mí un ejemplo como este (extraído de laRegla de cero):

class module {
public:
    explicit module(std::wstring const& name)
    : handle { ::LoadLibrary(name.c_str()), &::FreeLibrary } {}

    // other module related functions go here

private:
    using module_handle = std::unique_ptr<void, decltype(&::FreeLibrary)>;

    module_handle handle;
};

utilizandounique_ptr como una 'propiedad en un paquete' para manejadores es un mal ejemplo. Primero, hace uso del conocimiento interno de que el identificador es un tipo de puntero, y usa esto para hacer ununique_ptr Para el tipo básico, el tipo de controlador "opaco" se basa en.

Los manejadores pueden ser de cualquier tipo, pueden ser un puntero, pueden ser un índice o quién sabe. Lo más importante es que lo que tiene a mano (de la mayoría de las API de C, por ejemplo) es un manejador y su función de liberación de recursos.

¿Existe una propiedad adecuada en un paquete quetrabajos en semántica de manejo? Quiero decir, ¿ya está disponible públicamente para que uno lo use?

Para mi,unique_ptr et. Alabama. no funciona, debo hacer suposiciones innecesarias sobre el tipo de identificadores, cuando lo que quiero es simplemente obtener una 'propiedad en un paquete' a través del tipo de controlador opaco y su función de liberación, únicamente.

No tiene sentido que uno pueda mirar dentro del tipo de identificador para hacer construcciones sobre esta información. Es un asa, no debería importar.

Citaré aquí los sentimientos de otro usuario SO enotra pregunta responder:

Crear una clase específica de "puntero inteligente", no tomará mucho tiempo. No abuses de las clases de la biblioteca. Manejar la semántica es bastante diferente de la de un puntero de C ++; Por un lado, desreferenciar una MANIJA no tiene sentido.

Una razón más para usar una clase de control inteligente personalizada: NULL no siempre significa un control vacío. A veces es INVALID_HANDLE_VALUE, que no es lo mismo.

Renuncia:

Esta pregunta reformula y construye sobre ésta:

¿Dónde está la regla de cero correcta (manejo de recursos)?

Respuestas a la pregunta(4)

Su respuesta a la pregunta