我正在研究基于C的小型组件游戏引擎.各种组件被添加到gameobject对象的内部列表中,为了节省一些时间我不制作这些组件的成员变量,只有游戏对象是成员变量,如下所示:
void Initialize()
{
MeshComponent* meshRenderer = new MeshComponent(mesh, material);
m_GameObject.AddComponent(meshRenderer);
}
meshRenderer变量将添加到AddComponent()中的组件列表中,但在此函数结束时超出范围.
稍后(在游戏的更新/绘制循环中)调用此组件并且一切正常,尽管对象在初始化期间已超出范围.
我是否理解范围有问题,这样使用是否安全,或者我应该采取另一种方法(不必为每个组件制作成员变量)?
谢谢您的帮助!
最佳答案 首先,我建议你在开始像游戏引擎这样的大型项目之前更多地学习C语言.
超出范围的是meshRenderer变量,它是MeshComponent *类型,它是指向MeshComponent的指针.当指针超出范围时会发生什么?什么都没有.使用new运算符在堆上分配内存,它将保留在那里,直到您使用delete运算符释放它.