我到处寻找教程,我发现你必须像这样在box2d中设置一个世界:
b2World* world;
world = new b2World(b2Vec2(0.0f, -9));
为什么他们不只是这样做:
b2World world;
world = b2World(b2Vec2(0.0f, -9));
我的意思是,我没有看到这样做的好处 - 所以有人可以试着解释一下吗?谢谢!非常感谢您的时间:)
答案 0 :(得分:0)
您不必使用新运营商。如您所述,您可以在堆栈上将其实例化为:
b2World world(b2Vec2(0, 10));
您是否看过b2World
实例有多大?
尝试类似:
std::cout << sizeof(b2World) << std::endl;
我的大小为103,296字节!
对于许多系统,将103,296个字节放入堆栈是没有问题的。然而,并非所有系统都是如此。并且耗尽堆栈空间并不总是非常明显的情况。
在任何情况下,我发现b2World
的大小令人惊讶地大(在我的Box2D的分支中,我重新设计了世界级的小得多)。所以这个问题归结为更普遍的问题,即将世界实例放在堆栈上还是将其放在堆上。
我发现以下问题和答案我认为可以提供进一步的指导:When is it best to use the stack instead of the heap and vice versa?第二高的投票答案是:
根据经验,避免在堆栈上创建大型对象。
虽然我不确定b2World
实例的大小是为什么示例使用new(即使他们可以使用堆栈),但我怀疑它与它有很大关系。< / p>