나는 같은 것을 할 싶습니다 : 그에서부스트 :: ptr_vector 및 포인터
typedef X* X_Pointer;
boost::ptr_vector<X_Pointer> myvec;
X_Pointer x = new X();
myvec.push_back(x);
을 자신의 복사 생성자가 호출되지 않습니다 있도록 모두 포인터에 의해 참조 할에 내 객체를 원하고 나는 또한 원하는 ptr_vector
은 전체 벡터가 범위를 벗어날 때 메모리 관리를 제어합니다.
그러나 컴파일러는 마지막 줄에 대해 불평하고 있습니다. 나는 그것이 이고, 단지 X
가 아니라고 생각하기 때문에 생각한다.
X는 누군가 요청할 경우를 대비해 기본 유형을 포함합니다.
ptr_vector
을 어떻게 사용하여 을 저장할 수 있습니까?
는 편집 :
error : no instance of overloaded function "boost::ptr_vector<T, CloneAllocator, Allocator>::push_back [with T=X_Ptr, CloneAllocator=boost::heap_clone_allocator, Allocator=std::allocator<void *>]" matches the argument list
argument types are: (X_Ptr)
object type is: boost::ptr_vector<X_Ptr, boost::heap_clone_allocator, std::allocator<void *>>
myvec.push_back(x);
^
추가 컴파일러 오류 – mezamorphic
감사합니다 - 나는 그 이유 중 하나라고 생각 하나하지 일반적으로 타입 정의 포인터와 참조해야한다. 다른 모든 것을 typedef 할 수 있지만'*'또는'&'명시 적으로 남겨 둡니다. 그것은 내가 생각하기에 이것을 조금 더 쉽게 만들었을 것이다. –