2013-10-06 98 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