2015-01-21 2 views
0

일부 기존 코드가 나타났습니다.Stl C++ 동적 메모리 할당

typedef std::queue <EventDataPair> EventQueue; 
_eventQueue = new EventQueue(); 

왜 힙에 할당 된 대기열을 사용 하시겠습니까 ??? 이 코드가 포함 된 클래스는 Singleton입니다.

일반화하려면 언제 힙에 stl을 할당해야합니까? STL 자체는 본질적으로 동적이며 내부적으로 힙을 사용할 수 있습니다.

또한, 소멸자에서 할당을 해제하는 오버 헤드가 없습니까 ??

+3

동일한 이유로 동적으로 아무 것도 만들지 않습니다. 수명을 제어 할 수 있도록하기 위해서입니다. 문맥에 비추어 볼 때,이 특정 객체가 동적이어야하는 충분한 이유가 있는지 여부를 알 수있는 방법이 없습니다. –

+0

그것의 수명을 제어하는 ​​것은 유효한 관찰입니다 ...하지만 그 점을 제외하고, 나는 특히 싱글 톤에서 어떤 특별한 이유도 발견 할 수 없습니다 ... 객체가 절대 할당 해제되지 않을 것입니다. 또한, 당신은 소멸자에서 그것을 파괴하는 오버 헤드가 있습니까 ?? – basav

+0

오버 헤드가'delete _eventQueue;'와 같은 추가 코드를 작성하지 않는 한, 그것을 파괴하는 오버 헤드가 없다고 생각하지 않습니까? –

답변

2

코드에서 다른 컨텍스트간에 특정 개체를 공유하지 않으려는 경우에는 힙에 할당 할 인센티브가별로 없습니다.

그러나 일부 레거시 아키텍처의 경우 스택 크기에 관심이있을 수 있습니다.

1

내가 생각할 수있는 한 가지 이유는 함수에서 반환 할 때 복사본을 만드는 오버 헤드를 피하는 것입니다.

그러나 C++ 11 및 이동 의미에 대해서는 더 이상 필요하지 않습니다.

Bjarne Stroustrap이 말하는 this example을 살펴보십시오.