ПРИМЕЧАНИЕ : я обнаружил, что источник ошибки на самом деле не имеет отношения к shared_ptr, а просто умно замаскирован как таковой в сообщении об ошибке. Таким образом, нижеследующее - это в основном ерунда (не ответы, они в порядке)
-
У меня возникли проблемы с использованием shared_ptr
(в настоящий момент повышение), когда мне нужно просто перенаправить указатель на другую функцию. При использовании нативных указателей промежуточная функция не должна иметь доступа к определению класса, но при использовании smart_ptr оказывается, что это так. Есть ли способ избежать этого?
Например, заданная целевая функция:
void func( shared_ptr<SomeClass> const & obj )
const &
решает часть проблемы, но, скажем, у нас есть класс-получатель, который получает объект для какого-то другого класса, например:
shared_ptr<SomeClass> someClassInstance();
А вот где я хотел бы просто собрать аргументы и перейти к целевой функции:
func( someClassInstance() );
С простым указателем эта точка в коде может просто использовать прямое объявление SomeClass
, но с smart_ptr
оно должно иметь полное определение (предположительно, поскольку smart_ptr может потребоваться удалить класс).
Теперь, если someClassInstance
вернет const &
, эта проблема на самом деле исчезнет, поскольку промежуточный код не будет копировать какие-либо объекты. Однако функция получения должна возвращать копию из соображений безопасности потока.
Могу ли я в любом случае добиться такой переадресации параметров интеллектуального указателя без определения класса? То есть можно ли использовать интеллектуальные указатели таким же образом, как и традиционные указатели в этих обстоятельствах.
-
ОБНОВЛЕНИЕ : Написание небольшого теста дает правильные ответы, что достаточно предварительной декларации. Тем не менее, GCC все еще жалуется в одной ситуации. Я собираюсь выяснить, что именно вызывает его сбой (в данной конкретной ситуации).
Я сейчас закрываю этот вопрос или как?