std::allocator
을 사용하여 new
및 delete
을 랩핑하는 사용자 지정 벡터를 작성한다고 가정 해 봅시다.realloc 대신 std :: allocator를 어떻게 사용합니까?
요소 수가 벡터의 용량을 초과하면 버퍼를 더 큰 것으로 재 할당하고 싶습니다. realloc()
으로 전화하면 쉽게 해결할 수 있습니다. 할당 자/할당 취소의 책임은 할당 자에 있어야한다고 생각했기 때문에이 작업을 수행하고 싶지 않습니다.
그러나 std::allocator
의 인터페이스를 보면 어떻게 재 할당 할 수 있는지 알지 못합니다. 다음 allocator::deallocate
대신 단지 realloc
allocator::allocate
를 호출
T* allocate(std::size_t n);
void deallocate(T* p, std::size_t n);
내가해야하며 :이 만 방법은? 그렇게 효율적입니까? std::vector
도 마찬가지입니다. std::allocator
이 reallocate
기능을 제공하지 않는 이유는 무엇입니까?
_ "왜 std :: allocator는 재 할당 기능을 제공하지 않습니까?"_이 내용은 [이 질문에 포함되어 있습니다] (http://stackoverflow.com/questions/3105001/why-is-there-no-reallocation -functional-in-c-allocators? rq = 1). – ArchbishopOfBanterbury
[FYI] https://isocpp.org/wiki/faq/freestore-mgmt#realloc-and-renew – NathanOliver
@NathanOliver "C++에서 재 할당을 처리하는 가장 좋은 방법은 표준 라이브러리 컨테이너를 사용하는 것입니다 , 벡터와 같은 자연스럽게 자라게하십시오. "이 질문의 출발점입니다 ... –