문제

내 프로젝트의 경우, 나는 STL 컨테이너를 처음부터 쓰고 있습니다 (내 이유가 있습니다). STL의 기능과 인터페이스를 모방하기 때문에 "표준 구조와 동일한 이름을 갖는 경우 표준을 최대한 준수 할 것"정책을 유지하기 위해 최선을 다하고 있습니다.

물론 내 컨테이너는 할당자를 템플릿 매개 변수로 가져옵니다. 이는 일부 사용자 정의 할당 체계를 허용하기 때문에 매우 좋습니다. 내 질문에.

그만큼 std::allocator 인터페이스는 객체 구성에서 메모리 할당을 분리합니다. 마찬가지로 그것은 거래를 파괴와 분리합니다. 메모리를 얻는 곳은 C ++에서 객체를 올바르게 구성하는 것과 다소 관련이 없기 때문에 의미가 있습니다.

따라서 기본 구현 (책에서 바로 들어 올리면)과 같은 두 가지 구성/거래 기능이 있습니다.

void construct(pointer p, const T& val)    { new(p) T(val); }
void destroy(pointer p)                    { p->~T(); }

볼 수 있듯이 Construct는 단순히 새 호출을 새로 부르고 파괴는 단순히 파괴자라고 부릅니다.

새와 소멸자 구문을 사용하는 것만으로 이것을 사용해야 할 이유가 있습니까? "올바른"할당자가 다른 방식으로이를 구현할 수 있습니까? 아니면 표준을 준수하는 모든 할당 자 구현이 이러한 방식으로 구현/구현 된 방법을 갖게 될 것이라고 보장합니까?

요점까지, 나는 항상 내가 사용할 수 있다고 말하는 것이 안전합니까? std::uninitialized_copy 그리고 std::uninitialized_fill 컨테이너의 요소를 구성하기 위해?

감사.

도움이 되었습니까?

해결책

할당자는 시공/파괴 전후로 벌목 명세서를 추가 할 수 있거나, 다른 부작용을 걱정할 수 있습니다.

물론 실제 건축은 신규와 소멸자를 부름으로써 발생해야하지만 규칙 책에서는 다음과 같습니다. 다른 것은 없습니다 구성/파괴 기능에서 발생해야합니다

다른 팁

이것은 단지 방법에서 할당의 세부 사항을 숨기는 것입니다. 즉, 우리는 건축 및 파괴를위한 API를 제공하고 있으며, 앞으로는 구현을 변경할 수 있습니다. 이제 우리는 메모리를 할당하기 위해 새로운 배치를 사용하고 있습니다. 앞으로 할당을 변경하려면이 두 가지 방법을 변경해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top