计数存在的shared_ptr的数量

时间:2014-01-14 21:10:14

标签: c++ shared-ptr

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

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

有谁知道合理的方法吗?

1 个答案:

答案 0 :(得分:3)

您需要创建一个包装器或工厂,在那里获得所有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 ;
  }