我感到困惑,有没有办法计算班级对象的参考?
class A
{
public :
A(){}
}
int main()
{
A obj;
A * ptr1 = &obj;
A * ptr2 = &obj;
A * ptr3 = &obj;
}
现在我怎么知道我的对象 obj 被三个指针引用。
答案 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(或其他托管语言),那么这可能是一个困难的概念。
例如,shared_ptr<T>
将统计对象的所有“引用”并管理生命周期。 unique_ptr<T>
只允许指向您对象的单个指针。