Проблемы пожизненного времени с инкапсуляцией в стиле RAII, когда «менеджер ресурсов» не является глобальным [закрыто]C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Проблемы пожизненного времени с инкапсуляцией в стиле RAII, когда «менеджер ресурсов» не является глобальным [закрыто]

Сообщение Anonymous »

raii отлично работает при распределении от Global Ressource / OS. Почти все случаи в стандартной библиотеке используют некоторые глобальные ресурсы, но предположим, что это не так. (Исключением, конечно, является пользовательским распределителем для контейнеров, но это не очень хороший пример в моем представлении о коде, который вы хотите в производстве (в основном просто используют указатели повсюду). < /P>

Код: Выделить всё

// obj_rep could for example contain an id number or handle/pointer of some kind, does not //matter so much

struct Manager() {
obj_rep allocate();
void deallocate(obj_rep);
}

struct MyObject {
MyObject (Manager& m) : mng {m} {
//call allocate with a manager object
rep = mng.allocate();
}

~MyObject () {
//call deallocate with the same manager object
mng.deallocate(rep);
}

//TODO: implement rule of 3/5 here

private:
obj_rep rep;
Manager& mng;
}
В приведенном выше примере (и в моей текущей реализации) я сохранил ссылку (также может быть указателем) для менеджера - это требует, чтобы пользователь правильно управлял временем срока службы. Но есть ли лучший способ? Я знаю, что можно использовать shared_ptr /sleed_ptr , но есть ли способ как -то обратить вспять дизайн, чтобы избавиться от проблемы срока жизни и при этом иметь инкапсуляцию RAII?
Умные/слабые указатели и необработанные указатели, по большей части, следует избегать в коде библиотеки на уровне интерфейса (в C ++).


Подробнее здесь: https://stackoverflow.com/questions/794 ... nager-is-n
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»