计数存在的shared_ptr的数目

Count number of shared_ptr in existence

本文关键字:ptr shared 存在      更新时间:2023-10-16

我有一个数据类,通常在其中使用shared_ptr传递此类对象。现在,我想尝试跟踪该类的对象存在多少shared_ptr。请注意,这与指向特定对象的指针数量不同。我主要希望这有助于识别可能的内存泄漏,但在某些情况下,知道实际数字是有用的。

我的一个想法是为构建的每个shared_ptr保留一个弱指针的静态列表。然后,我可以定期检查有多少弱指针仍然有效。这里的问题是,如何在每次创建shared_ptr时自动向列表添加弱指针?自定义分配器能工作吗?

有人知道这样做的合理方法吗?

您需要创建一个包装器或工厂,在那里您可以获得所有的shared_ptr,这样您就可以同时进行侧核算。

template<class T, class... Args>
typename std::shared_ptr<T> make_recorded(Args... ar)
{ 
std::shared_ptr<T> ptr= make_shared<T>(ar) ;
// add your annotation/tracking here
return ptr ;
}