Я использую 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))
, я создам второй общий указатель на мой объект, который в итоге приведет к двойному удалению.
Это подводит меня к моему вопросу: существует ли стандартный шаблон для получения копии существующего общего указателя, который, как вы знаете, существует внутри метода на одном из этих объектов? Использует ли интрузивный счет, ссылаясь на мой единственный вариант здесь?