Есть ли подходящее «владение в упаковке» для «ручек»?

рукоятки иметь правильную семантику, кроме указателей. Так что для меня такой пример (извлеченный изПравило нуля):

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;
};

с помощьюunique_ptr как «владение в пакете» для ручек - плохой пример. Во-первых, он использует внутренние знания о том, что дескриптор является типом указателя, и использует это для созданияunique_ptr на базовый тип, на который опирается «непрозрачный» тип ручки.

Дескрипторы могут быть любого типа, они могут быть указателями, они могут быть индексами или кто знает. Самое главное, что у вас под рукой (например, из большинства C API) - это дескриптор и его функция высвобождения ресурсов.

Существует ли надлежащая «собственность в пакете», котораяработает в семантике дескриптора? Я имею в виду, уже общедоступный для использования?

Для меня,unique_ptr и др. и др. не работает, я должен сделать ненужные предположения о том, что тип ручкиявляется, когда я хочу просто получить «владение в пакете» только через непрозрачный тип дескриптора и его функцию освобождения.

Не имеет смысла вглядываться в тип дескриптора для создания конструкций на основе этой информации. Это ручка, это не должно иметь значения.

Я процитирую здесь чувства другого пользователя SO вдругой вопрос ответ:

Создайте определенный класс «умный указатель», это не займет много времени. Не злоупотребляйте занятиями в библиотеке. Семантика дескриптора весьма отличается от таковой для указателя C ++; с одной стороны, разыменование РУЧКИ не имеет смысла.

Еще одна причина использовать пользовательский класс умных дескрипторов - NULL не всегда означает пустой дескриптор. Иногда это INVALID_HANDLE_VALUE, что не то же самое.

Отказ от ответственности:

Этот вопрос переформулирует и строит на этом:

Где правильное (управление ресурсами) правило нуля?

Ответы на вопрос(4)

Ваш ответ на вопрос