我只是想要一个这样做的类:
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,删除器总是会被调用,所以也许我需要使用不同的指针,这使得它开始变得“凌乱”。
有没有标准的方法来处理这个问题,如果没有,最好的方法是什么?