C++ C++;,我可以重载类的一个点的赋值运算符吗?
可以重载类a的赋值运算符,但不确定是否允许重载类a指针类型的赋值运算符。 这是不是一个合理的问题。。。?如果是,如何进行 例如,每当我们在下面有一个指针引用时,我都想做ref_count++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; //
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>。您可以编写自己的包装类,并重载操作符*
和操作符->
以进行访问