Общий удалитель для shared_ptr в C++
У std::shared_ptr удалитель задают
вторым аргументом конструктора: общий
удалитель хранится вместе со счетчиком
ссылок в блоке управления.
Когда последняя копия исчезает, вызывается
именно эта функция, а не голый delete.
Подойдет лямбда с захватом или отдельная
функция. Запишем shared_ptr на целое
с лямбдой, которая печатает слово и освобождает
буфер:
#include <iostream>
#include <memory>
int main() {
std::shared_ptr<int> tally(
new int(12),
[](int* p) {
std::cout << "shared free\n";
delete p;
});
std::cout << *tally << "\n";
return 0;
}
Соберите shared_ptr<int>
на число 7 с лямбдой-удалителем,
печатающей done перед delete.
Скопируйте указатель в вторую переменную
и выведите значение из копии.