2013-10-06 96 views
0

我願做這樣的事情:的boost :: 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

的boost :: ptr_vector需要的類,而不是指針作爲模板參數。您應該創建這樣說:

boost::ptr_vector<X> myvec; 
+0

因此複製構造函數會被調用嗎? – mezamorphic

+0

複製X的構造函數?我沒有看到任何理由爲什麼會這樣。 – simon