我想做这样的事情:
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);
^
boost::p tr_vector 将类而不是指针作为模板参数。您应该以这种方式创建它:
boost::ptr_vector<X> myvec;