Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对象引用的计数_C++ - Fatal编程技术网

C++ 对象引用的计数

C++ 对象引用的计数,c++,C++,我感到困惑,有没有办法计算类对象的引用 class A { public : A(){} } int main() { A obj; A * ptr1 = &obj; A * ptr2 = &obj; A * ptr3 = &obj; } 现在我将如何知道我的对象obj由三个指针引用。只有在您自己实现它的情况下。如果您来自C#或Java(或其他托管语言),那么这可能是一个困难的概念 最好使用或提供的标准指针类型之一 例如,将记录对对象的所

我感到困惑,有没有办法计算类对象的引用

class A
{
  public :
    A(){}
}

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

现在我将如何知道我的对象obj由三个指针引用。

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

最好使用或提供的标准指针类型之一


例如,将记录对对象的所有“引用”,并管理生命周期。将只允许一个指针指向您的对象。

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

最好使用或提供的标准指针类型之一


例如,将记录对对象的所有“引用”,并管理生命周期。将只允许一个指针指向您的对象。

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

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

例如:

#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;
}
#包括
#包括
甲级
{
公众:
A(){}
}
int main()
{
//动态分配一个堆栈,而不是像shared_ptr那样分配它
//当引用计数为0时,尝试删除其对象。
std::shared_ptr ptr1(新的A());
std::共享ptr ptr2(ptr1);
std::共享ptr ptr3(ptr1);

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

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

例如:

#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;
}
#包括
#包括
甲级
{
公众:
A(){}
}
int main()
{
//动态分配一个堆栈,而不是像shared_ptr那样分配它
//当引用计数为0时,尝试删除其对象。
std::shared_ptr ptr1(新的A());
std::共享ptr ptr2(ptr1);
std::共享ptr ptr3(ptr1);
标准::cout