2017-02-05 4 views
0

:왜 b2World를 초기화 할 때 new 연산자를 사용해야합니까? - 모든 지역, 당신이 이런 식으로 Box2D의에서 설정에 세상을 볼 내가 자습서 갈 Box2D의

b2World* world; 
world = new b2World(b2Vec2(0.0f, -9)); 

을 왜 그들은 단지이 일을하지 않습니다 : 내 말은

b2World world; 
world = b2World(b2Vec2(0.0f, -9)); 

을, 나는 이것을하는 이점을 보지 못합니다 - 누군가가 이것을 설명해 주시겠습니까? 감사! 시간은 많이 감사드립니다 :)

+1

'b2World' [기본 생성자가 없습니다] (http://www.learn-cocos2d.com/api-ref/1.0/Box2D/html/classb2_world.html) 때문에 두 번째 작업을 수행 할 수 없습니다. 아마도'b2World world ({0.0f, -9}); '를 대신 할 수도 있고, 메모리 관리를 잘못하면 더 효율적이고 힘들 겠지만, Box2D의 요점은 예쁜 코드를 작성하지 않고 현실적인 물리 시뮬레이션을 만드는 것입니다 . – nwp

+0

고마워요! 나는 당신이 말하는 것을 얻은 것 같지만, 왜 Box2d 개발자는 포인터가없는 b2world가 아닌 모든 포인터를 기반으로 하는가? –

+1

@SUhost 객체의 수명이 선언의 범위를 벗어나지 않는 한, 불행하게도 생성되는 객체가 본질적으로 복잡 할 때마다 'new'를 사용하는 것이 더 쉬운 반응입니다. 다른 이유는 샘플 코드의 작성자가 Java 또는 C# 프로그래머이기 때문일 수 있으며 객체를 작성하는 '새'는 습관 일 수 있습니다. – PaulMcKenzie

답변

0

새 연산자를 사용할 필요가 없습니다.

b2World world(b2Vec2(0, 10)); 

당신이 b2World 인스턴스하지만 얼마나 큰을 살펴나요 : 당신이 언급 한 바와 같이, 당신은 스택에 인스턴스화 할 수 있습니까?

시도 뭔가 같은 :

std::cout << sizeof(b2World) << std::endl; 

나는 103296 바이트의 크기를 얻을!

많은 시스템에서 103,296 바이트를 스택에 넣는 것은 아무런 문제가되지 않습니다. 그러나 모든 시스템에 해당하는 것은 아닙니다. 그리고 스택 공간이 부족한 것은 항상 분명한 상황이 아닙니다. 어떤 경우

, 나는 b2World의 크기가 로 찾아 놀라 울 큰 (그리고 Box2D의 내 포크에 내가 훨씬 작게 세계 클래스를 재 작업했습니다). 그래서이 질문은 세계 인스턴스를 스택에 놓을 지 또는 힙에 놓을지를 결정하는 일반적인 질문으로 귀결됩니다. 스택에 큰 개체를 만들지 않도록, 엄지 손가락의 규칙으로

: When is it best to use the stack instead of the heap and vice versa? 두 번째로 높은 투표 대답했다 :

는 내가 추가 지침을 제공 할 수 있다고 생각 다음과 같은 질문과 대답을 발견했다. 나는 예 (그들이 스택을 사용할 수도 경우에도) 새로운 사용하는 이유 b2World 인스턴스의 크기는 것을 확실히 알 수 없지만

, 나는 그것으로 할 일이 많이 있었다 생각한다.

관련 문제