Re: shared_ptr/make_shared и делитер, довесить доп обработку
От: Chorkov Россия  
Дата: 29.03.24 10:01
Оценка: 2 (1)
Здравствуйте, пффф, Вы писали:

П>Какие есть варианты?


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

С другой стороны, если не жалко лишнею аллокацию, то можно прицепить мониторинг вызова деструктора к уже существующему умному указателю.

template<class A, class OnExit>
std::shared_ptr<A>
monitor_pointer_lifetime( std::shared_ptr<A> ptr, OnExit on_exit )
{
    A* raw_ptr = ptr.get();
    auto deleter=[ptr=std::move(ptr), on_exit=std::move(on_exit)](void*) { on_exit(); };   
    return std::shared_ptr<A>( raw_ptr, std::move(deleter) );
}


пример

Я таким образом искал утечку умных указателей, прикручивая счетчики числа живых объектов, выданных разными способами.
Отредактировано 29.03.2024 10:17 Chorkov . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.