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

时间:2018-11-13 08:42:10

标签: 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;       //line 2
 }

执行第1行后,A.ref_count为1 第2行执行后,A.ref_count为2

2 个答案:

答案 0 :(得分:2)

您似乎不需要引用计数的指针。首先让我们检查一下为什么您的解决方案不起作用:

  1. 在这里:A* a1 = new A();您正在执行指针分配,而不是不是类分配。您不能使此操作超载。
  2. Class A的定义中,您实现了引用计数。这不是一个好的解决方案,如果您要一个新类(Class B)也需要引用计数,该怎么办?您必须重新实施它。这不是很好或可重复使用的。

那么,我们该怎么办?好吧,这取决于您为什么不引用计数。似乎您不需要自我管理的内存。 Fortunatley,c ++已经为此提供了一个构造。是std::shared_ptr。您可以像这样使用它:

{
  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.

答案 1 :(得分:1)

我相信您的意思是指针分配。简短答案:,你不能。