在boost中是否有通用的“清理”类?

时间:2010-12-06 12:15:37

标签: c++ boost boost-function boost-smart-ptr

我只想要一个这样做的课程:

class cleanup : boost::noncopyable
{
 public:
  typedef boost::function0<void> function;
  explicit cleanup( function f ) : func( f )
  {
  }

  ~cleanup()
  {
    func();
  }
  private:
    function func; 
};

目的是我有这个“清理”来在删除时调用func。清理将作为shared_ptr传递。

我也考虑过在boost :: shared_ptr中使用自定义删除器。也许我可以使用boost :: shared_ptr并使用NULL创建并获取func()以获取它忽略的参数。

这一切的目的是抽象出一个步骤,我希望类的析构函数在最后一个引用超出范围时执行(实际上将自己从容纳它的容器中移除而不需要类知道它的容器)。

如果我使用shared_ptr,我可能会传递其中一个:

boost::shared_ptr<void> cleanupObj( NULL, func );

这里的func必须带一个参数。如果指针为NULL,我甚至不会100%确定删除器总会被调用,所以我可能需要使用不同的指针使它开始变得“​​凌乱”。

有没有一种标准的方法可以解决这个问题,如果没有,最好的办法是什么?

1 个答案:

答案 0 :(得分:2)

我相信Boost中有一个Scope Exit库。但是,为什么不直接使用您在OP中编写的代码?而且,通常情况下,如果您在容器中有一个类,请让容器的所有者在参考文件中删除,并处理没有任何内容时会发生的情况。