2013-10-06 2 views
0

나는 같은 것을 할 싶습니다 : 그에서부스트 :: 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); 

      ^
+0

추가 컴파일러 오류 – mezamorphic

+0

감사합니다 - 나는 그 이유 중 하나라고 생각 하나하지 일반적으로 타입 정의 포인터와 참조해야한다. 다른 모든 것을 typedef 할 수 있지만'*'또는'&'명시 적으로 남겨 둡니다. 그것은 내가 생각하기에 이것을 조금 더 쉽게 만들었을 것이다. –

답변

3

부스트 :: ptr_vector 클래스, 템플릿 매개 변수로하지 포인터를합니다. 당신은 이런 식으로 작성해야합니다 :

boost::ptr_vector<X> myvec; 
+0

그래도 복사 생성자가 호출 되었습니까? – mezamorphic

+0

X의 복사 생성자? 나는 왜 그것이 부름을받을 지 알지 못한다. – simon

관련 문제