![]() |
1
52
我认为这更像是一个哲学问题,而不是技术问题。) 根本的问题是移动和复制之间的区别是什么。我不会跳到技术/标准化语言,让我们简单地:
正如您所说,可以根据拷贝来实现移动:将拷贝创建到新位置并丢弃原始位置。但是有两个问题。一个是性能,第二个是关于用于raii的对象:这两个对象中哪一个应该拥有所有权? 适当的move构造函数解决了两个问题:
这个
用一个
另一方面,
所以你
可以
使用
不幸的是,Visual Studio在执行标准方面可能相当松懈,而且还具有一些扩展,您需要禁用这些扩展,以确保代码的可移植性…不要用它来检查标准:) |
![]() |
2
12
这个
有一篇关于右值引用的伟大文章 here . 如果你还没有读过它们,或者是很困惑,看看吧! |
![]() |
3
7
例如,
事实证明,像快速排序和堆排序这样的排序算法实际上可以毫无困难地在适当的位置工作。快速排序的分区例程在内部使用std::swap,这对涉及的两个对象都是移动操作。当选择一个透视时,一个技巧是将它与范围中的第一个元素交换,这样在分区完成之前,它将永远不会被移动。 |