Удалить аргумент необработанного указателя для boost :: bind

Допустим, у меня выделена куча A * , которую я хочу передать в качестве аргумента boost :: bind . boost :: bind сохраняется для последующей обработки в некотором контейнере типа STL для boost :: functions .

Я хочу убедиться, что A * будет быть уничтоженным при уничтожении контейнера STL.

Для демонстрации:

A* pA = new A();

// some time later
container.push_back(boost::bind(&SomeClass::HandleA, this, pA);

// some time later
container is destroyed => pA is destroyed too

Как это можно сделать?

РЕДАКТИРОВАТЬ

Может быть, то, что я хочу, не так реально.

У меня есть необработанный указатель и функция, которая получает исходный указатель. Вызов откладывается с помощью boost :: bind . На этом этапе я хочу, чтобы автоматическое управление памятью выполнялось в случае выполнения boost :: bind. Я ленив, поэтому хочу использовать «готовое» решение для интеллектуальных указателей.

std :: auto_ptr выглядит хорошим кандидатом, однако ...

auto_ptr pAutoA(pA);
container.push_back(boost::bind(&SomeClass::HandleA, this, pAutoA);

не компилируется (см. здесь )

auto_ptr pAutoA(pA);
container.push_back(boost::bind(&SomeClass::HandleA, this, boost::ref(pAutoA));

pAutoA разрушается, удаляя лежащий в основе pA.

РЕДАКТИРОВАТЬ 02

В упомянутом контейнере мне нужно будет хранить разные «обратные вызовы» с разными аргументами. Некоторые из них являются необработанными указателями на объект. Поскольку код старый, я не всегда могу его изменить.

Написание собственной оболочки для хранения обратных вызовов в контейнере - последнее средство (хотя, возможно, и единственное), отсюда и награда.

6
задан dimba 14 May 2011 в 20:20
поделиться