有人能告訴我這兩種方法之間的區別如何使用?返回boost :: shared_ptr和從返回的原始指針構造boost :: shared_ptr有什麼區別?
如果我使用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();
}
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