Dus*_*ger 6 c++ move-semantics c++11
示例 A 中使用的移动语义是否必要,哪个结构更好?
示例 A:
struct A
{
std::string a;
A( std::string a ) : a( std::move(a) ){ }
};
Run Code Online (Sandbox Code Playgroud)
示例 B:
struct B
{
std::string b;
B( const std::string& b ) : b( b ){ }
};
Run Code Online (Sandbox Code Playgroud)
我不相信这是一个重复的问题。我特别询问从在类构造函数中使用成员初始化的角度来看,哪个示例更好。另一个问题中列出的示例或答案均未涉及成员初始化。
我不喜欢使用引用参数调用构造函数,然后将其复制到成员中。似乎有多个复制操作可能很浪费。
我想尽可能有效地将数据“管道”到成员中,但我不想将右值作为构造函数参数。
在我看来,将两者进行比较是不真实的。
大多数时候,实现的复制构造函数会进行深度复制,其背后的主要目的是确保源对象不被修改。
std::move 最终调用右值引用的移动构造函数,仅复制指针并可以将源对象指针设置为 NULL。这种场景主要针对临时对象。
因此,这两个示例都有两个不同的目的,一个(复制构造函数)当您希望源对象不受影响时,另一个( std::move)用于处理临时对象。
| 归档时间: |
|
| 查看次数: |
1189 次 |
| 最近记录: |