有人可以告诉我这两种方法在如下使用时的区别吗?
如果我使用 CreateBoostContainer,我的代码运行良好。但是,如果我使用 CreateContainer,则稍后在尝试在 ContainerC 上使用 shared_from_this 时,函数 Foo 的代码中会出现 boost::bad_weak_ptr 异常。我只使用一个线程。
谢谢!
用法:
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();
}
场景元素节点C:
class SceneElementNodeC
{
SceneElementNodeC(boost::shared_ptr<SceneElementI> spSceneElement)
: m_spSceneElement(spSceneElement)
{};
}
集装箱C:
class ContainerC : public SceneElementI, public boost::enable_shared_from_this<ContainerC>
{
ContainerC()
{};
void Foo(VisitorI* poVisitor)
{
poVisitor->Visit(shared_from_this());
};
}