C++ C++;传递给基类的共享\u ptr
我有以下代码:C++ C++;传递给基类的共享\u ptr,c++,inheritance,smart-pointers,C++,Inheritance,Smart Pointers,我有以下代码: struct Entity; // Simplified just for example struct BoxCollider { std::shared_ptr<Entity> parentPtr; BoxCollider(std::shared_ptr<Entity> parent) : parentPtr(parent) {} }; struct MyObject : public Entity
struct Entity; // Simplified just for example
struct BoxCollider
{
std::shared_ptr<Entity> parentPtr;
BoxCollider(std::shared_ptr<Entity> parent) :
parentPtr(parent)
{}
};
struct MyObject : public Entity, public BoxCollider, std::enable_shared_from_this<MyObject>
{
MyObject() :
BoxCollider(this->shared_from_this())
{}
}
struct实体;//例如,简化
结构盒对撞机
{
std::共享\u ptr parentPtr;
BoxCollider(标准::共享\u ptr父级):
家长(家长)
{}
};
struct MyObject:public实体,public BoxCollider,std::enable_shared_from_this
{
MyObject():
BoxCollider(此->共享来自\u this()的\u)
{}
}
而且,它并没有像预期的那样工作-抛出内存异常,std::bad\u-weak\u-ptr
。我怎么修理它
我需要该指针是因为我使用的
物理引擎
需要上转换(std::dynamic_pointer_cast
)实体
指针;其中BoxCollider
是从中派生出来的。在我决定从原始指针转向智能指针之前,一切都正常了。呃…,你忘了问问题了对不起,马上修复我收回了我的答案。问题是,即使您使用std::make_shared
创建对象,shared_ptr
直到MyObject
的构造函数返回很久之后才完成初始化。我回答这个问题:我也尝试在没有它的情况下创建它:BoxCollider(std::make_shared(*这个)
(也没有星号)也不起作用。@Condzi那个修复程序会让事情变得更糟。你会有一个指向这个
的副本的指针,而不是这个
。此外,你会创建一个不完整的这个
的副本(这个的构造函数刚刚开始执行)。是否仅将parentPtr
用作此
的别名?如果是,则将共享到此
将导致一个永远不会被销毁的实例。