Владение ресурсом через указатель [дубликат]

95
25 ноября 2020, 08:40
На этот вопрос уже даны ответы здесь:
Лямбда в умных указателях вместо функторов (2 ответа)
как правильно привернуть HBITMAP к make_unique вместе с deleter'ом (2 ответа)
Закрыт 1 год назад.

Чтобы не заморачиваться с написанием класса-обертки, думаю использовать лямбда + unique_ptr, иначе говоря, пишу

HKEY key = nullptr;
auto regclose = [](HKEY *key) {
   if ((key) && *key != nullptr) {
      if (!RegCloseKey(*key))
        std::wcout << L"Не удалось закрыть ключ реестра" << std::endl;
   }
};
if (ERROR_SUCCESS != RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"Target", 0, KEY_QUERY_VALUE, &key)) return 1;
std::unuque_ptr<HKEY, decltype(regclose)> halt(&key, regclose);

Насколько корректен будет этот код? Где потенциальные ошибки?

Answer 1

Ошибка тут в использовании указателя на объект с автоматическим временем хранения. Владение таким объектом не может быть передано в умный указатель. А владение объектом, на который ссылается дескриптор при таком подходе не передается.

READ ALSO
Как это работает?

Как это работает?

есть программа:

114
не получается добавить ATL simple object

не получается добавить ATL simple object

Создал ATL Project, в него пытаюсь добавить простой ATL объектНазвал компонент Indexer, вижла создает соответсвующий интерфейс и класс Однако в файле...

126
Аналог frexp (из С++ math.h) в С#

Аналог frexp (из С++ math.h) в С#

Пытаюсь перенести проект с C++ на C#, однако в SystemMath C# отсутствует функция разложения на экспоненту и мантиссу (frexp в C++)

95
Значение return

Значение return

Я не понимаю, куда и что возвращает оператор returnВ функции main это говорит о завершении программы с кодом 0 (успешно), а что происходит в других...

73