#include <vector>#include <memory>class X {public: voID f(voID) { }};class Y : public X {public: voID g(voID) { }};class A {private: std::vector <std::unique_ptr <X> > xs;public: voID addX(std::unique_ptr <X> &ref) { xs.push_back(std::move(ref)); }};int main() { A a; std::unique_ptr <Y> y(new Y()); y->f(); y->g(); std::unique_ptr <X> x(y.release()); a.addX(x); return 0;}
在main函数中,我试图构建一个Y类型的对象,然后将其添加到一个X对象的向量中.但是,我不能直接说a.addX(y)为std :: unique_ptr< Y>无法转换为std :: unique_ptr< X>&.这就是为什么我想出了一个解决方法,我使用释放的内部指针y初始化另一个唯一指针x.
虽然这有效,但它似乎不是最好的解决方案.是否有更好的方法来传递std :: unique_ptr< Y>类型的对象?作为类型std :: unique_ptr< X>& ;?的参数
谢谢,
– 斯坦
std::unique_ptr<X> x;std::unique_ptr<Y> y { new Y };x = std::move(y);
对于非常具体的问题,如果您需要通过引用接收unique_ptr子类,则无法进行转换,然后使用模板函数.
template < typename T,typename = typename std::enable_if< std::is_base_of<X,T>::value>::type >voID foo( std::unique_ptr<T> & ) {}
最后,因为想法是获得指针的所有权,如果你通过rvalue引用传递unique_ptr,这可以按你的意愿工作.
voID bar( std::unique_ptr<X> && ) {}// thenbar( std::move(y) );@H_301_44@ 总结
以上是内存溢出为你收集整理的在C中的unique_ptr之间进行转换全部内容,希望文章能够帮你解决在C中的unique_ptr之间进行转换所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)