Я просто хочу класс, который делает это:
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 );
Здесь функция должна принимать параметр. Я не уверен на 100% даже в том, что средство удаления всегда будет вызываться, если указатель равен NULL, поэтому, возможно, мне нужно использовать другой указатель, чтобы он начал выглядеть «грязно».
Существует ли стандартный способ справиться с этим, а если нет, то какой способ лучше?