Дополнительные аргументы для пользовательского удаления shared_ptr - программирование
Подтвердить что ты не робот

Дополнительные аргументы для пользовательского удаления shared_ptr

В любом случае, я могу отправить аргументы в deleter std::shared_ptr?

то, что было бы похоже:

std::shared_ptr<A> myA( a, myDeleter(a, 5) );   

где myDeleter имеет такую ​​подпись:

void myDeleter(A* a, int i)

(Очевидно, что приведенный выше синтаксис неверен, но просто для того, чтобы подчеркнуть, что мне нужен мой делектор, чтобы принимать дополнительные аргументы.)

4b9b3361

Ответ 1

Вы могли бы std::bind изменить свой второй аргумент перед тем, как передать его как deleter:

auto deleter = std::bind(myDeleter, std::placeholders::_1, 5);
std::shared_ptr<A> myA(a, deleter);

В качестве альтернативы, ваш делектор может быть функтором, который принимает int через свой конструктор:

struct myDeleter
{
  myDeleter(int);
  void operator()(A*);
};

myDeleter deleter(5);
std::shared_ptr<A> myA(a, deleter);

В качестве альтернативы вы можете использовать выражение лямбда:

std::shared_ptr<A> myA(a, [](A* a){ myDeleter(a, 5); });