2014-11-08 4 views
0

내 목적이 할당자를 작성하는 것이라고 가정하면,이 할당자가 나를 연습으로 제공합니다. 나는 libstdc++ 내가 alloc 제품군의 기능을 기대하고 있었다 정직하게, 실제 메모리를 할당, ++ 된 libstdc 내부 std::allocator (또는 동급 클래스 내부, 후드 new을 사용하는 것으로 나타났습니다.할당 자에서 new 및 * alloc 함수를 사용할 때 차이점이 있습니까?

모두 new과 기능의 *alloc 가족 void *을 반환하고 메모리를 할당하지만 디자인 관점에서 다른 디자인보다 더 빛나는 디자인이 있습니까? new의 예제 또는 new의 좋은 지침을 제공 할 수 있습니까?이 연산자가이기는 경우 alloc?

내 새로운 코드베이스는 언어 사양에 대한 참조 프레임이 필요한 경우를 대비하여 C++ 11보다 오래되었습니다.

PS new

내가 분명히 글로벌 네임 스페이스의 new 말하는 겁니다.

+0

'alloc'이 던지지 않습니다. – AlexD

+1

'nothrow' 버전의'new'가 있습니다. –

+0

@AlexD'new'는 C++ 11 이상에서'noexcept'가 될 수 없습니까? – user2485710

답변

4

두 가지 주요 차이점이 있습니다. 첫 번째는 malloc과 회사 은 더 이상 메모리가 없으면 null 포인터를 반환하므로 null 포인터를 다시 얻으려면 을 확인하고 std::bad_alloc을 반환해야합니다. 함수를 사용하면 을 던질 것이므로 메모리를 할당 할 수 없으므로이 기능을 해제합니다. 두 번째는 사용자가 operator new/operator delete 함수를 바꿀 수 있다는 것입니다. 이것은 보통 디버그 빌드에서 트랙 메모리 누수와 매달린 포인터로 수행됩니다. (실제로는 을 malloc으로 처리 할 수도 있지만 정식으로는 정의되지 않은 동작입니다.)