【发布时间】:2021-12-23 00:00:07
【问题描述】:
我用以下代码编写了一个类:
class Test {
public:
...
Test( const Test &&that ) : i(that.i), s(std::move(that.s)) {
cout << "move contructor." << endl;
}
...
private:
int i;
std::string s;
};
如果我反汇编我看到的生成代码:
.type Test::Test(Test const&&), @function
Test::Test(Test const&&):
...
call std::remove_reference<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>::type&& std::move<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
movq %rax, %rsi
movq %rbx, %rdi
.LEHB3:
call std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@PLT
对basic_string<...>::basic_string( basic_string<...> const&) 的调用让我感到惊讶,因为我希望调用basic_string basic_string<...>::basic_string( basic_string<...> &&) 的移动构造函数。
我以不正确的方式实现移动构造函数?
【问题讨论】:
-
你用的是什么编译器?这是代码的调试版本还是发布版本?
-
@HajoKirchhoff: g++ 9.3.0
标签: c++ move-semantics