Вопросы по теме '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 просмотров
schedule
28.11.2023
Классы-оболочки 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