C++ 为什么在初始化b2World时必须使用新运算符?-Box2d
无论我去哪里学习教程,我都看到您必须在box2d中设置一个世界,如下所示:C++ 为什么在初始化b2World时必须使用新运算符?-Box2d,c++,memory-management,box2d,C++,Memory Management,Box2d,无论我去哪里学习教程,我都看到您必须在box2d中设置一个世界,如下所示: b2World* world; world = new b2World(b2Vec2(0.0f, -9)); 为什么他们不只是这样做: b2World world; world = b2World(b2Vec2(0.0f, -9)); 我的意思是,我不认为这样做有什么好处,所以请有人解释一下好吗?谢谢非常感谢您的时间:)您不必使用新的操作员。正如您所指出的,您可以在堆栈上将其实例化为: b2World world(b
b2World* world;
world = new b2World(b2Vec2(0.0f, -9));
为什么他们不只是这样做:
b2World world;
world = b2World(b2Vec2(0.0f, -9));
我的意思是,我不认为这样做有什么好处,所以请有人解释一下好吗?谢谢非常感谢您的时间:)您不必使用新的操作员。正如您所指出的,您可以在堆栈上将其实例化为:
b2World world(b2Vec2(0, 10));
您是否查看了b2World
实例的大小
尝试以下方法:
std::cout << sizeof(b2World) << std::endl;
std::你不能做第二个吗,因为b2World
。您可能可以做b2World({0.0f,-9})相反,它会更有效,更难出错,但Box2D的目的是进行真实的物理模拟,而不是编写漂亮的代码。谢谢!我想我明白你的意思了,但是为什么Box2d的开发人员都基于指向世界的指针,而不仅仅是没有指针的b2world?@SUhost除非对象的生命周期需要在声明的范围内生存,不幸的是,当创建的对象本质上很复杂时,使用new
更像是膝跳反应。其他原因可能是示例代码的编写者是Java或C#程序员,创建对象是一种习惯。您误解了。您可以使用其中的一个,但必须正确使用。@ SUhost——在这种情况下,在C++中使用<代码>新< /COD>的唯一原因是,如果需要管理其自身生命周期的对象,或者如果底层API要求该对象“活着”,则在声明的范围之外。否则,是由C++程序员编码的“膝上颠倒”(或习惯力),将“复杂对象”等同于“动态创建”。