问题标签 [boost-ptr-container]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
217 浏览

c++ - 移动 boost::ptr_vector

给定一个不可复制但可移动的类型,我正在尝试构造boost::ptr_vector这种类型的 a 并从函数中返回它。我正在使用 Visual Studio 2013。

我只能得到 (3) 来编译:临时ptr_vector的被移动了。使用 (1) 和 (2),编译器调用boost::new_clone试图调用NonCopyableButMovable的复制构造函数。

根据这个常见问题解答,“移出功能”部分,(1)应该可以工作,即res应该移动,而不是复制。

根据这个线程,(2)可以用作不完全符合标准的编译器的解决方法,但由于我不明白的原因,boost::new_clone也可以用(2)调用。

请注意,如果我替换boost::ptr_vectorstd::vector,则三种返回编译方式都很好。

VS2013 的 Boost ptr_containers 移动语义是否有问题?情况(2)会发生什么?实现这样的 ptr_container 工厂函数的解决方法是什么?