Я широко використовую boost:shared_ptr
свій код. Насправді більшість об'єктів, що виділяються в купі, утримуються a shared_ptr
. На жаль, це означає, що я не можу перейти this
до жодної функції, яка займає a shared_ptr
. Розглянемо цей код:
void bar(boost::shared_ptr<Foo> pFoo)
{
...
}
void Foo::someFunction()
{
bar(this);
}
Тут є дві проблеми. По-перше, це не компілюється, оскільки конструктор T * для shared_ptr
явний. По-друге, якщо я змушую його будувати за допомогою, bar(boost::shared_ptr<Foo>(this))
я створив другий спільний вказівник на мій об’єкт, що врешті-решт призведе до подвійного видалення.
Це підводить мене до мого запитання: чи існує якийсь стандартний шаблон для отримання копії існуючого спільного вказівника, який, як ви знаєте, існує зсередини методу на одному з цих об’єктів? Чи є використання нав'язливого підрахунку посилань моїм єдиним варіантом тут?