为什么不使用静态变量作为智能指针的引用计数

my_*_*ion 5 c++ smart-pointers

当我查看"增强版"智能指针 - 增强是添加引用计数 - 我看到他们使用一些"复杂"技术进行引用计数,例如一个完全独立的类或指向整数的指针.

这是一个例子:

template<class T>
class SmartPointer{
  T* mp_T;
  unsigned int * mp_Count;
  public:
    ... all the APIs ...
};
Run Code Online (Sandbox Code Playgroud)

我想知道,收益是多少?由于目标是让所有实例共享值,为什么不将它声明为静态成员变量:

template<class T>
class SmartPointer{
  T* mp_T;
  static unsigned int m_Count;
  public:
    ... all the APIs ...
};
Run Code Online (Sandbox Code Playgroud)

我必须错过一些东西,但经过一番搜索后,我找不到任何答案.请说清楚.

ken*_*ytm 10

静态数据成员由同一个类的所有实例共享.但是两个不同的智能指针不应该共享相同的引用计数.举个例子,

SmartPointer<int> a;
...
SmartPointer<int> b;
SmartPointer<int> c = b;   // ref count increased due to copying.
Run Code Online (Sandbox Code Playgroud)

在你的计划,am_Count也会被在注释行增加了,因为static变量之间的所有共享SmartPointer<int>,虽然此行是无关的a.


AnT*_*AnT 5

这个想法不是"让所有实例共享价值".是什么让你这么想的?

我们的想法是让所有指向同一对象的指针实例共享计数器.指向不同对象的指针实例应该具有独立的非共享计数器.静态计数器不会实现这个概念.