我只想要一个这样做的课程:
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%确定删除器总会被调用,所以我可能需要使用不同的指针使它开始变得“凌乱”。
有没有一种标准的方法可以解决这个问题,如果没有,最好的办法是什么?
答案 0 :(得分:2)
我相信Boost中有一个Scope Exit库。但是,为什么不直接使用您在OP中编写的代码?而且,通常情况下,如果您在容器中有一个类,请让容器的所有者在参考文件中删除,并处理没有任何内容时会发生的情况。