boost :: ptr_vector和指针

时间:2013-10-06 16:49:38

标签: c++ boost vector 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

X只包含原始类型,以防任何人询问。

如何使用ptr_vector存储X*

编辑:

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);

              ^

1 个答案:

答案 0 :(得分:3)

boost :: ptr_vector接受类,而不是指针作为模板参数。你应该这样创建它:

boost::ptr_vector<X> myvec;