计算对象的引用

时间:2014-06-24 12:03:18

标签: c++

我感到困惑,有没有办法计算班级对象的参考?

class A
{
  public :
    A(){}
}

int main()
{
  A obj;
  A * ptr1 = &obj;
  A * ptr2 = &obj;
  A * ptr3 = &obj; 
}

现在我怎么知道我的对象 obj 被三个指针引用。

2 个答案:

答案 0 :(得分:4)

原始指针不进行引用计数。您需要自己实现引用计数智能指针类,或者使用已存在的类指针类,例如std::shared_ptr

shared_ptr允许您使用use_count()成员函数访问其引用计数。

例如:

#include <memory>
#include <iostream>

class A
{
  public :
    A(){}
}

int main()
{
  //Dynamically allocate an A rather than stack-allocate it, as shared_ptr will
  //try to delete its object when the ref count is 0.
  std::shared_ptr<A> ptr1(new A());
  std::shared_ptr<A> ptr2(ptr1);
  std::shared_ptr<A> ptr3(ptr1);
  std::cout<<"Count: "<<ptr1.use_count()<<std::endl; //Count: 3
  return 0;
}

答案 1 :(得分:2)

只有您自己实施。如果您来自C#或Java(或其他托管语言),那么这可能是一个困难的概念。

您最好使用C++11Boost提供的标准指针类型之一。

例如,shared_ptr<T>将统计对象的所有“引用”并管理生命周期。 unique_ptr<T>只允许指向您对象的单个指针。