Я реализую шаблон 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
}
Благодаря
¤ ** Если ** вы сами реализуете вызовы ref-count, вы должны сделать это в каждом конструкторе (включая конструктор копирования) и деструкторе. Но вам это не нужно. Просто используйте 'boost :: intrusive_ptr' - который, несмотря на то, что имя не нужно использовать для реализации интрузивного указателя, он просто заботится о них, обращаясь к ним. Cheers & hth., –
Будьте предупреждены. Даже самые умные ребята из C++ не могут написать правильный умный указатель. Скотт Майерс часто говорит о своей попытке в своих лекциях (спустя 5 лет после публикации (после того, как он был широко рассмотрен перед публикацией)), он говорит, что по-прежнему получает электронные сообщения об этом. У умных указателей в стандарте было 100 тысяч людей, которые смотрели на них, чтобы проверить их, чтобы убедиться, что ошибок нет. –