可以重载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
答案 0 :(得分:2)
您似乎不需要引用计数的指针。首先让我们检查一下为什么您的解决方案不起作用:
A* a1 = new A();
您正在执行指针分配,而不是不是类分配。您不能使此操作超载。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)
我相信您的意思是指针分配。简短答案:否,你不能。