将智能指针作为参数传递给函数

时间:2012-02-12 14:54:12

标签: c++ memory-management smart-pointers reference-counting

我正在实施一个智能指针模板,有一件事让我感到困惑;将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
}

由于

3 个答案:

答案 0 :(得分:5)

智能指针的所有构造函数必须操作引用计数,包括复制构造函数,并且还必须涉及赋值运算符。

如果这让你感到困惑,那么编写自己的智能指针可能为时尚早;相反,您可以暂时使用高质量的std::shared_ptr

答案 1 :(得分:2)

传递参数时,会复制它,这将调用复制构造函数。通常最好同时重载相等运算符。

或者使用boost :: shared_ptr或其他一些现有的类。是不是你不使用这个?

答案 2 :(得分:1)

应该在你的复制构造函数和你的赋值运算符中处理它。