【发布时间】:2019-04-16 01:08:24
【问题描述】:
可以重载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
}
执行第一行后,A.ref_count 为 1 执行第 2 行后,A.ref_count 为 2
【问题讨论】:
-
你的
main()中的两行中没有operator=()涉及 -
你在做的是copy initialization,而不是赋值。
-
不,你不能重载指针赋值。赋值运算符必须是成员函数,当你赋值给一个指针时它不会被调用。
-
幸运的是,您不需要自己为指针实现引用计数,在 C++ 中它们拼写为
std::shared_ptr<A>。 -
如果您想添加更多自定义代码而不仅仅是引用计数,您可以编写自己的包装类并重载
operator*和operator->以供访问
标签: c++ pointers operator-overloading