2017-09-27 2 views
2

옵션 A에서 초기화되지 않은 메모리를 할당 할 수있는 가장 관용적 방법입니다 더 짧지 만 ::operator new은 분명히 C++이며 std::malloc으로 구현되었을 것입니다. 어느 쪽이 C++에서 사용하는 것이 더 낫고/더 관용적인지.어느 하나는 C++

+3

[std :: aligned_storage] (http://en.cppreference.com/w/cpp/types/aligned_storage)를 살펴보십시오. –

+0

@ FrançoisAndrieux : std :: aligned_storage가 메모리를 할당하지 않습니다. – geza

+3

@geza 사실입니다. 내 의견의 요점은 원시 메모리 대신'std :: aligned_storage'의 인스턴스를 할당 할 것을 제안하는 것이 었습니다. 이 예제는 메모리가 'T'유형의 객체를 몇 개 보유 할만큼 커야한다는 것을 알 수 있음을 보여줍니다. 그것은 휴대용 솔루션입니다. –

답변

2

가능한 한 메모리를 유형 안전 방식으로 할당하는 것이 좋습니다. 그 질문 중의 경우, 옵션 A를 선호, operator new(size_t, std::nothrow) 이유는 new

  • 연산자와 delete가 (이 사용자 정의 할당/누수 탐지 시나리오에서 유용 할 수 있습니다) 합법적으로 재정의 할 수 있습니다.
  • 낮은 메모리 (set_new_handler)를 처리 할 대체 할당자가있을 수 있습니다.
  • 훨씬 더 C++입니다. 당신이 (realloc과는 not 간단한 무료 +의 malloc입니다) operatornew/delete에서 지원하지 않는 realloc재 할당을 최적화하려면

malloc/free을 선호하는 유일한 이유입니다.