C++ 为什么在初始化b2World时必须使用新运算符?-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

无论我去哪里学习教程,我都看到您必须在box2d中设置一个世界,如下所示:

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})new
更像是膝跳反应。其他原因可能是示例代码的编写者是Java或C#程序员,创建对象是一种习惯。您误解了。您可以使用其中的一个,但必须正确使用。@ SUhost——在这种情况下,在C++中使用<代码>新< /COD>的唯一原因是,如果需要管理其自身生命周期的对象,或者如果底层API要求该对象“活着”,则在声明的范围之外。否则,是由C++程序员编码的“膝上颠倒”(或习惯力),将“复杂对象”等同于“动态创建”。