【发布时间】:2014-07-14 02:31:50
【问题描述】:
我有一个类,它有一个 std::vector 数据成员。然后我有一个简单的 get 成员函数,它只是按值返回数据成员。
class X{
public:
vector<shared_ptr<MyClass>> z;
vector<shared_ptr<MyClass>> X::getVector(){
return z;
}
};
当我调用以下 C++ 时:
std::vector<boost::shared_ptr<MyClass>> my_vec = obj->getVector();
这个 x86 是生产出来的:
std::vector<boost::shared_ptr<MyClass>> my_vec = obj->getVector();
mov rdx,qword ptr [r8+20h]
test rdx,rdx
je boost::boost::+3DCh (013F0F690Ch)
lea rcx,[x]
call std::vector<boost::shared_ptr<MyClass>, std::allocator<boost::shared_ptr<MyClass> > >::vector (013F0E9700h)
我期望应用返回值优化 (RVO) 或 std::vector 移动构造函数。但是,我无法从 x86 中推断出哪个?
【问题讨论】:
-
您在声明中使用返回值,因此应用了复制构造。我假设你没有使用 C++11,所以没有移动构造
标签: c++ vector move move-semantics rvo