2014-12-12 2 views
1

std::unorderd_map<U,T>이 있는데, U, T는 구체적인 유형입니다. 그런 다음지도에 맞춤형 new 연산자를 사용하여 std::pair<U,T>을 입력하면지도에 무언가를 삽입 할 때마다 맞춤 new 연산자가 사용됩니다. 그게 끝날 수 있습니까? 이것이 가능한 방법에 대한 힌트가 있습니까? 모든 stl 컨테이너에 new이 오버로드 된 것을 검색했지만 그 주제에 대해 많은 것을 찾지 못했습니다.stl 컨테이너에 과부하 "new"가 있습니까?

+0

먼저, 연산자 new 'pointer = new SomeType (argument)'의'new' 키워드는 다른 것들입니까? –

+0

나는 그것을 지금 보았다. 그리고 나는 그것을 알지 않았다. 힌트를 가져 주셔서 감사합니다. – ben

+0

다행 이군. 두 번째 : Kerrek의 대답을 지원합니다. 맞춤 할당자를 사용하는 것이 더 좋습니다. 이것이 바로 표준 컨테이너가 제공하는 사용자 정의 메커니즘입니다. –

답변

8

operator new에 대한 과부하는 잊어 버리십시오. 그것은 거의 쓸모없는 언어 기능입니다. 메모리 할당은 핵심 언어보다 라이브러리에서 더 잘 수행됩니다. 실제로 수행해야하는 작업은 사용자 정의 할당자를 맵에 전달하는 것입니다.

MyCustomAllocator<std::pair<const U, T>> alloc(a, b, c); 

std::unordered_map<U, T, std::hash<U>, std::equal<U>, 
        MyCustomAllocator<std::pair<const U, T>>> m(10, alloc); 
+1

나는 정말로 더 잘했다는 것을 확신하지 못한다. (할당자는 엉망이다.) 어쨌든, 분명히 다르게 끝난다. –

+0

@ JerryCoffin : 표준 라이브러리의 실제 할당자가 아무 문제가 없다고 말하는 것이 아닙니다. 메모리 할당은 핵심적인 문제가 아니라 라이브러리 문제입니다. 'std :: vector '보다 더 이상 살펴볼 필요가없고'new int [n]'을 사용하지 않는다는 것을 알 수 있습니다. –

+1

'MyCustomAllocator'를 만드는 방법에 대한 간단한 소개를 포함시켜 주시겠습니까? 어떤 지침없이 커스텀 할당자를 만드는 것은 정말 엉망이 될 수 있습니다. –

관련 문제