은 '당신이 std::vector
사용하려는 최적화 된 사용자 정의 할당 (예를 들어, 작은 할당에 대한 사용자 정의 할당이 std::string
같은 종류의 대신 힙의 스택에서 메모리를 가져옵니다 개발 된 가정 또는 Windows에서 예를 들어 VirtualAlloc
을 사용하여 큰 용량의 메모리를 할당 한 다음 포인터를 증가시키는 청크 내부에서 단일 할당을 조각화합니다.반환 벡터
typedef std::vector<T, OptimizedAllocator<T>> OptimizedVector;
함수에서 벡터를 반환하는 컨텍스트에서이를 사용하는 방법은 무엇입니까? 함수의 범위의 끝에서
OptimizedVector DoSomething()
{
OptimizedVector<int>::allocator_type alloc{};
OptimizedVector<int> v{alloc};
// Do stuff...
return v;
}
는 할당 객체는 파괴되기 때문에, 반환 된 벡터 오른쪽, 쓰레기를 포함 할 수있다?
대안은 추가 매개 변수로 각 기능에 대한 참조로 할당 된 개체를 전달할 수 있습니다,하지만
이 방법이 ... 안전하게 "삽입" 할당 자 객체 종류의 추한 벡터에?이 문제를 어떻게 해결합니까? here 가입일
할당 자 객체는 반환 값으로 복사되거나 이동됩니다. 위의 예제에서 반환 값은 이동으로 생성됩니다. 할당자는 복사 및 이동을 지원해야합니다. –
참고 : 'std :: vector'에 대해 스택에서 안전하게 할당 할 수 없습니다. –
@ Cheersandhth.-Alf 예 다음과 같이 할 수 있습니다. https://github.com/orlp/libop/blob/master/bits/memory.h#L45. – orlp