当我阅读关于移动语义和右值引用的示例时,它们正在利用rvalue引用的优点并在围绕指针的 大对象周围移动语义,例如:1 2
例如,它们只是复制移动对象内的指针并将其设置为nullptr.(移动/交换)
我的问题是,移动语义对于没有指针但是它们很大的对象有任何优势(性能)吗?
class BigClass
{
int data[BIG_SIZE];
int a01;
.
.
. many members
.
.
int z99;
public:
move constructor ?!
};
Run Code Online (Sandbox Code Playgroud)
And*_*owl 10
移动语义对于没有指针但是它们很大的对象有任何优势吗?
它在性能方面没有任何优势,因为你不会像你所注意到的那样迅速"偷走"被移动物体的内脏.
但是,从纯粹的逻辑角度来看,类的语义可能使得您的对象不应该是可复制的,因此不能/不应该提供复制构造函数.
例如,a的内部unique_ptr结构不是任何可以被移动的任何东西都比它可以被复制的更快(它是原始指针上的零开销包装器),但是语义约束使得无法复制a unique_ptr.在这种情况下,移动语义就是保持不变量,即只有一个 unique_ptr指向某个对象的东西必须在程序的某个特定时间存在.
因此,移动构造函数(或移动赋值运算符)unique_ptr也必须重置正在移动的指针以保持不变量.
你的类可能与a完全不同unique_ptr,也许可能相当重,但可能仍然存在使其不可复制的语义约束.在这种情况下,可以利用移动语义来强制执行正确的不变量.
| 归档时间: |
|
| 查看次数: |
754 次 |
| 最近记录: |