2012-01-17 64 views
2

我最近发现boost ptr_vector对于管理我的堆分配对象集合非常有用。指针集合库非常好,但不幸的是,我被阻止了一件事。从boost :: ptr_vector获取指针而不是引用

我的代码的另一部分需要显式地持有指向我的对象在ptr_vector(由于特定原因,它不能作为参考)之一我的对象。但是,当你在一个ptr_vector访问对象时,你会得到一个参考,T &即使你使用ptr_vector.push_back((T *)

有反正我可以得到一个简单的指针出了升压:: ptr_vector ?

+2

你能解释为什么它必须是一个指针吗?也许有另一种选择。 – 2012-01-17 09:35:21

+0

你还可以解释* hold *是什么意思:它是否意味着所有权?或仅仅访问指向的值? – 2012-01-17 10:56:11

回答

9

是,

boost::ptr_vector<int> v; 
v.push_back(new int()); 
int* ptr = &v[0]; 
3

相同的方式,从一个普通向量做:&myvec[index]当然,你对你自己的保证指针不使用后的对象不再有如果。变得困难,那么你可以考虑切换到vector<shared_ptr<T> >而不是ptr_vector<T>