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

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

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;

    module_handle handle;
};

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

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

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

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

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

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

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

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

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

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

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

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

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