Может ли кто-нибудь сказать мне разницу между этими двумя методами при использовании, как показано ниже?В чем разница между возвратом boost :: shared_ptr и построением boost :: shared_ptr из возвращаемого исходного указателя?
Если я использую CreateBoostContainer, мой код работает хорошо. Однако, если я использую CreateContainer, я получаю исключение boost :: bad_weak_ptr позже в коде в функции Foo при попытке использовать shared_from_this в ContainerC. Я использую только один поток.
Спасибо!
Использование:
SceneElementNodeC* poNode(new SceneElementNodeC(CreateBoostContainer()));
SceneElementNodeC* poNode(new SceneElementNodeC(boost::shared_ptr<SceneElementI>(CreateContainer())));
Определения:
boost::shared_ptr<SceneElementI> LoaderC::CreateBoostContainer() const
{
return boost::shared_ptr<SceneElementI>(new ContainerC());
}
SceneElementI* LoaderC::CreateContainer() const
{
return new ContainerC();
}
SceneElementNodeC:
class SceneElementNodeC
{
SceneElementNodeC(boost::shared_ptr<SceneElementI> spSceneElement)
: m_spSceneElement(spSceneElement)
{};
}
ContainerC:
class ContainerC : public SceneElementI, public boost::enable_shared_from_this<ContainerC>
{
ContainerC()
{};
void Foo(VisitorI* poVisitor)
{
poVisitor->Visit(shared_from_this());
};
}
Прежде всего, спасибо за проработку разницы, именно этого я и не понял. – schluchc
Что касается именования CreateBoostContainer, то, конечно, это ужасно, но это было просто отличить две функции в этом вопросе. Что касается второго момента, вы правы, но я надеюсь, что в таком случае у вас все еще есть шанс улучшить вопрос (который я обязательно сделаю) вместо того, чтобы сразу закрыть его;) – schluchc