2

我只是想要一个这样做的类:

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

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

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

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

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

如果我用 shared_ptr 来做,我可能会绕过其中之一:

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

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

有没有标准的方法来处理这个问题,如果没有,最好的方法是什么?

4

1 回答 1

2

我相信 Boost 中有一个 Scope Exit 库。但是,为什么不直接使用您在 OP 中编写的代码呢?而且,通常,如果您在容器中有一个类,则让容器的所有者分发引用并处理当没有引用时发生的情况。

于 2010-12-06T12:24:22.687 回答