Передача умного указателя в качестве параметра функции - PullRequest
0 голосов
/ 12 февраля 2012

Я внедряю шаблон smartpointer-шаблона, и меня беспокоит одна вещь;Как увеличить счетчик ссылок при передаче 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 ]

5 голосов
/ 12 февраля 2012

Все конструкторы вашего умного указателя должны манипулировать подсчетом, включая конструктор копирования, и оператор присваивания также должен быть задействован.

Если это вас озадачивает, возможно, вам еще рано писать собственные умные указатели; вместо этого вы можете использовать высококачественный std::shared_ptr на данный момент.

2 голосов
/ 12 февраля 2012

Когда вы передаете параметр, он копируется, что вызывает конструктор копирования.Как правило, рекомендуется перегрузить оператор равенства одновременно.

Либо так, либо используйте boost :: shared_ptr, либо какой-либо другой существующий класс.По какой-то причине вы этим не пользуетесь?

1 голос
/ 12 февраля 2012

Об этом нужно позаботиться в конструкторе копирования, а также в операторе присваивания.

...