Любой шаблон RAII в повышении или C++ 0x

Есть ли любой шаблон, доступный в повышении для RAII. Существуют классы как scoped_ptr, shared_ptr которые в основном работают над указателем. Могут те классы использоваться для любых других ресурсов кроме указателей. Есть ли любой шаблон, который работает с общие ресурсы.

Возьмите, например, некоторый ресурс, который получен в начале объема и должен быть так или иначе выпущен в конце объема. Оба получают, и выпуск делают некоторые шаги. Мы могли записать шаблон, который берет два (или возможно один объект) функторы, которые делают эту задачу. Я не продумал его, как это может быть достигнуто, я просто задавался вопросом, там любые существующие методы, чтобы сделать это

Edit: Как насчет одного в C++ 0x с поддержкой функций лямбды

14
задан jalf 23 January 2010 в 03:02
поделиться

3 ответа

Shared_PTR обеспечивает возможность указать пользовательский удален . Когда указатель должен быть уничтожен, удаление удаляется и может делать все необходимыми действиями очистки. Этот способ более сложные ресурсы, чем простые указатели, можно управлять с помощью этого укомплектованного классом у указателя.

12
ответ дан 1 December 2019 в 06:53
поделиться

Наиболее общемысленным подходом является Scopeguard , одна (основная идея в эта статья DDJ , реализована, например, с удобными макросами в Boost. ), и позволяет выполнять функции или очистить ресурсы на выходе сферы.

Но если честно, я не понимаю, почему вы этого хотели. Пока я понимаю, что его немного раздражает, чтобы написать класс каждый раз для одноэтап-аквариума и одноэтапно-релиз, вы говорите о многоступенчатой ​​и -реазе.
Если его взятые несколько шагов, это, на мой взгляд, принадлежит в соответствующем именованном классе утилиты, чтобы детали были скрыты и код на месте (тем самым уменьшая вероятность ошибки).
Если вы взвешиваете его против прибылей, эти несколько дополнительных линий на самом деле не о чем беспокоиться.

8
ответ дан 1 December 2019 в 06:53
поделиться

Я должен признать, что я не вижу такой точки. Письменная оболочка Raii с царапины не смехотся уже просты. Там просто не так много работы, которые будут сохранены, используя какую-то предопределенную обертку:

struct scoped_foo : private boost::noncopyable {
  scoped_foo() : f(...) {}
  ~scoped_foo() {...}

  foo& get_foo() { return f; }

private:
  foo f;
};

Теперь ... по сути, по сути, которые должны быть заполнены вручную, если вы использовали некоторые Вид генерала Raii шаблон: создание и уничтожение нашего Foo Ресурс. И без них на самом деле не так много. Несколько строк кода котельной, но это так мало, так мало, кажется, не стоит добывать его в многоразовый шаблон, по крайней мере, не в данный момент. С добавлением лямбдаса в C ++ 0x, мы могли бы написать функторы для создания и разрушения так кратко, что это может быть стоит написать их и подключить их в многоразовый шаблон. Но до тех пор, кажется, что это будет больше проблем, чем стоит. Если вы должны были определить два функтора, чтобы подключить к шаблону Raii, вы бы уже использовали большую часть этого кода Code .

5
ответ дан 1 December 2019 в 06:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: