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
用作
的别名?如果是,则将
共享到
将导致一个永远不会被销毁的实例。