Вопросы по теме 'raii'

Освобождение выделенной памяти
Это хорошая практика? Или я должен просто заменить блок кода между { и } функцией? Его можно использовать повторно (я признаю), но моя единственная мотивация для этого — освободить colsum , поскольку он огромен и не требуется, чтобы я мог...
393 просмотров
schedule 18.05.2022

Как инкапсулировать C API в классы RAII C++?
Учитывая C API для библиотеки, управляющей сеансами, которой принадлежат элементы, как лучше всего инкапсулировать C API в классы RAII C++? C API выглядит так: HANDLE OpenSession(STRING sessionID); void CloseSession(HANDLE hSession); HANDLE...
1340 просмотров
schedule 10.07.2023

Нужно ли иметь статические конструкторы, когда мы следуем способу RAII делать что-то на C++?
Если бы я следовал правилу RAII и разрабатывал класс на C++, были бы нужны статические конструкторы? Помогут ли мне статические конструкторы каким-либо образом или это будет неправильный шаг?
294 просмотров
schedule 02.04.2024

Предотвращение взрыва заголовка в C++ (или C++0x)
Скажем, с общим кодом, например следующим: y.hpp: #ifndef Y_HPP #define Y_HPP // LOTS OF FILES INCLUDED template <class T> class Y { public: T z; // LOTS OF STUFF HERE }; #endif Теперь мы хотим иметь возможность...
1450 просмотров
schedule 13.06.2023

RAII и раскручивание стека
TIL, что мои представления о «переплетении» (из-за отсутствия лучшего слова) RAII и разматывании стека совершенно (если не полностью) неверны. Насколько я понимаю, использование RAII защищает от любых/всех утечек ресурсов - даже тех, которые...
1725 просмотров

Классы-оболочки Win API для дескрипторов
Написать класс-оболочку для дескриптора, который передается только по значению, относительно легко. Я пытаюсь определить, как лучше всего инкапсулировать дескрипторы, которые необходимо передать по адресу. Например, написать оболочку для чего-то...
1698 просмотров
schedule 20.05.2023

Когда RAII имеет преимущество перед GC?
Рассмотрим этот простой класс, демонстрирующий RAII на C ++ (из моей головы): class X { public: X() { fp = fopen("whatever", "r"); if (fp == NULL) throw some_exception(); } ~X() { if (fclose(fp) != 0){...
1911 просмотров
schedule 25.03.2024

Доступно ли надлежащее «владение пакетом» для «дескрипторов»?
дескрипторы имеют правильную семантику, отличную от указателей. Для меня такой пример (извлечен из Правило нуля ): class module { public: explicit module(std::wstring const& name) : handle { ::LoadLibrary(name.c_str()),...
3509 просмотров
schedule 04.03.2022

Есть ли риск в оболочке AutoCloseable для java.util.concurrent.locks.Lock?
С введением try-with-resource в Java 7 я был удивлен, увидев, что что Lock не был преобразован в AutoCloseable . Это казалось довольно простым, поэтому я сам добавил его следующим образом: class Lock implements AutoCloseable {...
2736 просмотров
schedule 04.11.2023

Как настроить стандартный контейнер с классом RAII?
Чтобы реализовать идиому raii для типа SOCKET , я создали обертку. Оболочка вызывает connect в конструкторе и closesocket в своем деструкторе. std::map содержит все используемые сокеты. К сожалению, вставка нового сокета в контейнер...
477 просмотров
schedule 19.07.2022

Управление объектами Objective-C с помощью c ++ std :: unique_ptr ‹› или std :: shared_ptr ‹›
Objective-C можно до некоторой степени смешивать с c ++, и можно вызывать друг друга . Но объекты Objective-C по-прежнему управляются более или менее вручную, а идиома RAII полностью отсутствует в языке. Интересно, можно ли управлять сроками жизни...
3402 просмотров
schedule 11.11.2023

как я могу создать дескриптор файла RAII без создания нового int
Я хочу создать оболочку RAII для файлового дескриптора. Поскольку объект может передаваться по потокам, он действительно является общим ресурсом: именно поэтому я сделал первую реализацию, используя shared_ptr с пользовательским деструктором....
2001 просмотров
schedule 07.07.2023

С++ новое выделение массива C, RAII или простой shared_ptr/boost::shared_array
Я изучаю С++, и я снова наткнулся на новую проблему. Мне нужно выделить массив C для использования библиотекой, но, конечно, безопасным способом. Я уже нашел, что delete[]; в конце метод терпит неудачу с треском. СТАРЫЙ, не очень хороший:...
356 просмотров
schedule 18.07.2023

C ++ с использованием RAII с деструктором, который выбрасывает
Скажем, у меня есть класс RAII: class Raii { Raii() {}; ~Raii() { if (<something>) throw std::exception(); } }; И если у меня есть функция: void foo() { Raii raii; if (something) { throw...
1011 просмотров
schedule 02.06.2024

Запрещение пользователям создавать безымянные экземпляры класса
Для многих классов RAII "охранников" создание экземпляров анонимных переменных вообще не имеет смысла: { std::lock_guard<std::mutex>{some_mutex}; // Does not protect the scope! // The unnamed instance is immediately destroyed....
1874 просмотров
schedule 04.03.2024

Что означает сохранение ресурса как инвариантного класса в RAII?
Что означает, что сохранение ресурса является инвариантом класса в RAII? На странице Википедии RAII говорится: В RAII хранение ресурса является инвариантом класса и привязано к времени жизни объекта: выделение (получение) ресурсов...
144 просмотров
schedule 22.05.2024

Заявление, которое не является полным выражением
Часто можно услышать, что в C++ временные объекты деконструируются в конце полного выражения . Полное выражение определяется как выражение, которое не является подвыражением какого-либо другого выражения. Для меня это звучит очень похоже на...
257 просмотров
schedule 03.06.2023

Как следует обрабатывать ошибки при создании классов RAII?
Если часть распределения ресурсов конструктора, например. сбой оболочки сокета RAII, я просто выбрасываю исключение и покончу с этим? Или мне следует использовать способ std::fstream , где вам нужно проверить is_open() после создания объекта?...
78 просмотров
schedule 23.04.2023