Сообщение Re: shared_ptr/make_shared и делитер, довесить доп обработку от 29.03.2024 10:01
Изменено 29.03.2024 10:17 Chorkov
Re: shared_ptr/make_shared и делитер, довесить доп обработку
Здравствуйте, пффф, Вы писали:
П>Какие есть варианты?
Можно унаследоваться от требуемого класса, (или включить класс в другой в качестве члена класса), и выполнить действия в производном классе.
С другой стороны, если не жалко лишнею аллокацию, то можно прицепить мониторинг вызова деструктора к уже существующему умному указателю.
Я таким образом искал утечку умных указателей, прикручивая счетчики числа живых объектов, выданных разными способами.
П>Какие есть варианты?
Можно унаследоваться от требуемого класса, (или включить класс в другой в качестве члена класса), и выполнить действия в производном классе.
С другой стороны, если не жалко лишнею аллокацию, то можно прицепить мониторинг вызова деструктора к уже существующему умному указателю.
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) );
}Я таким образом искал утечку умных указателей, прикручивая счетчики числа живых объектов, выданных разными способами.
Re: shared_ptr/make_shared и делитер, довесить доп обработку
Здравствуйте, пффф, Вы писали:
П>Какие есть варианты?
Можно унаследоваться от требуемого класса, (или включить класс в другой в качестве члена класса), и выполнить действия в производном классе.
С другой стороны, если не жалко лишнею аллокацию, то можно прицепить мониторинг вызова деструктора к уже существующему умному указателю.
пример
Я таким образом искал утечку умных указателей, прикручивая счетчики числа живых объектов, выданных разными способами.
П>Какие есть варианты?
Можно унаследоваться от требуемого класса, (или включить класс в другой в качестве члена класса), и выполнить действия в производном классе.
С другой стороны, если не жалко лишнею аллокацию, то можно прицепить мониторинг вызова деструктора к уже существующему умному указателю.
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) );
}пример
Я таким образом искал утечку умных указателей, прикручивая счетчики числа живых объектов, выданных разными способами.