Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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++;,我可以重载类的一个点的赋值运算符吗?_C++_Pointers_Operator Overloading - Fatal编程技术网

C++ C++;,我可以重载类的一个点的赋值运算符吗?

C++ C++;,我可以重载类的一个点的赋值运算符吗?,c++,pointers,operator-overloading,C++,Pointers,Operator Overloading,可以重载类a的赋值运算符,但不确定是否允许重载类a指针类型的赋值运算符。 这是不是一个合理的问题。。。?如果是,如何进行 例如,每当我们在下面有一个指针引用时,我都想做ref_count++ class A{ public: A(){} ~A(){} int ref_count{0}; } main() { A* a1 = new A(); //line 1 A* a2 = a1; //

可以重载类a的赋值运算符,但不确定是否允许重载类a指针类型的赋值运算符。 这是不是一个合理的问题。。。?如果是,如何进行

例如,每当我们在下面有一个指针引用时,我都想做ref_count++

class A{
   public:
         A(){}
         ~A(){}
         int ref_count{0};
}

main()
{
        A* a1 = new A();   //line 1
        A* a2 = a1;       //line 2
 }
执行第1行后,A.ref_计数为1
执行第2行后,A.ref_计数为2,我相信您指的是指针赋值。简短回答:,您不能。

看起来您不需要引用计数指针。首先,让我们检查一下您的解决方案不起作用的原因:

  • 这里:
    A*a1=newa()您正在执行指针赋值,而不是类赋值。不能重载此操作
  • 在您对
    A类
    的定义中,您实现了引用计数。这不是一个好的解决方案,如果您想要一个也需要引用计数的新类(
    class B
    ),该怎么办?你必须重新实施它。这既不好也不可重复使用 那么,我们能做些什么呢?好吧,这取决于你为什么不计算参考资料。看起来你没有自我管理的内存。Fortunatley,C++提供了一个已经构建的结构。它是。您可以这样使用它:

    {
      std::shared_ptr<A> a1 = std::make_shared<A>(); // Reference count is set at 1
      {
        std::shared_ptr<A> a2 = a1; // Reference count is incremented to 2
      } // Reference count is decremented to 1
    } // Reference count is decremented to 0 and the memory is released.
    
    {
    std::shared_ptr a1=std::make_shared();//引用计数设置为1
    {
    std::shared_ptr a2=a1;//引用计数增加到2
    }//引用计数递减为1
    }//引用计数递减为0并释放内存。
    
    main()
    中的两行中没有
    运算符=()
    ,您正在做的是,不是赋值。不,您不能重载指针赋值。赋值操作符必须是成员函数,当分配给指针时,它将不被调用。幸运的是,您不需要为指针自己执行REF计数,在C++中,它们拼写为“代码> STD::SyrdYPPTR < /C>。您可以编写自己的包装类,并重载
    操作符*
    操作符->
    以进行访问