当我 check out “增强型”版本的智能指针时-增强功能是添加了引用计数-我看到它们对引用计数使用了一些“复杂”技术,例如完全独立的类或指向整数的指针。

这是一个例子:

template<class T>
class SmartPointer{
  T* mp_T;
  unsigned int * mp_Count;
  public:
    ... all the APIs ...
};

我想知道,有什么收获?由于目标是让所有实例共享该值,所以为什么不仅仅将其声明为静态成员变量:
template<class T>
class SmartPointer{
  T* mp_T;
  static unsigned int m_Count;
  public:
    ... all the APIs ...
};

我必须错过一些东西,但是经过一番搜索,我找不到任何答案。请说明一下。

最佳答案

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

SmartPointer<int> a;
...
SmartPointer<int> b;
SmartPointer<int> c = b;   // ref count increased due to copying.

在您的方案中,在注释行中am_Count也将增加,因为static变量在所有SmartPointer<int>之间共享,尽管该行与a无关。

10-04 20:21