我正在实施一个智能指针模板,有一件事让我感到困惑;将smartpointer作为参数传递给另一个函数时,如何增加引用计数器?我会重载哪个运算符来增加引用计数?
例如:
class test
{
test() { }
~test() { }
};
void A()
{
SmartPointer<test> p;
B(p);
}
void B(SmartPointer<test> p)
{
C(p);
}
void C(SmartPointer<test> p)
{
// p ref count is still 1 and will be destroyed at end of C
}
由于
答案 0 :(得分:5)
智能指针的所有构造函数必须操作引用计数,包括复制构造函数,并且还必须涉及赋值运算符。
如果这让你感到困惑,那么编写自己的智能指针可能为时尚早;相反,您可以暂时使用高质量的std::shared_ptr
。
答案 1 :(得分:2)
传递参数时,会复制它,这将调用复制构造函数。通常最好同时重载相等运算符。
或者使用boost :: shared_ptr或其他一些现有的类。是不是你不使用这个?
答案 2 :(得分:1)
应该在你的复制构造函数和你的赋值运算符中处理它。