Я широко использую boost:shared_ptr
в своем коде. Фактически, большинство объектов, размещенных в куче, удерживаются shared_ptr
. К сожалению, это означает, что я не могу передать this
в любую функцию, которая принимает shared_ptr
. Рассмотрим этот код:
void bar(boost::shared_ptr<Foo> pFoo)
{
...
}
void Foo::someFunction()
{
bar(this);
}
Здесь есть две проблемы. Во-первых, это не скомпилируется, потому что конструктор T * для shared_ptr
является явным. Во-вторых, если я заставлю его строить с bar(boost::shared_ptr<Foo>(this))
, я создам второй общий указатель на мой объект, который в конечном итоге приведет к двойному удалению.
Это подводит меня к моему вопросу: существует ли какой-либо стандартный шаблон для получения копии существующего общего указателя, который, как вы знаете, существует из метода одного из этих объектов? Является ли использование навязчивого подсчета ссылок моим единственным вариантом здесь?