2 srhouyu srhouyu 于 2017.01.12 15:07 提问

C++11的问题:类的默认移动构造函数会做什么?

类默认的移动构造函数是否是这样:

  • 如果是简单值、静态数组、指针,就复制
  • 无视指针指向的内容
  • 如果是直接的对象,就调用其移动构造函数

是这样吗?

是否意味着,假如类及其成员的类都未写移动构造函数,那么当需要移动的时候,实际效果与默认拷贝构造函数是一样的?

1个回答

oyljerry
oyljerry   Ds   Rxr 2017.01.12 16:11
已采纳

没有实现移动构造,移动拷贝函数,就不能利用移动的优势,主要是性能的提升

但是C++11中的STL等模板库已经支持移动了,所以你的程序即使不改,当你使用vector,list等这些时,也会可能受益到移动构造函数带来的性能优化

oyljerry
oyljerry 回复srhouyu: 主要的收益是当你把一个vector赋值给另一个vector的时候
一年多之前 回复
srhouyu
srhouyu 感谢。 如果往vector中push的对象中只有几个float成员,那么有没有可能从移动中获益呢? 例如这样: class Point { float x,y; }; std::vector<float> v; Point p; v.push_back(std::move(p)); 这种情况下,有获益的可能吗?
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C++ 11新特性:移动构造函数和移动赋值操作符
移动构造函数 在C++11中新加入的特性! 在上一篇blog中我加入了一张图,可以具体看到移动构造函数的运行原理。 此时,我们偷走了临时变量的内存空间,据为己用。节省了开辟空间的时间。 [cpp] view plaincopy A(A && h) : a(h.a)   {       h.a = null
C++11学习9---移动构造函数
主要讲的是如何实现移动构造。 1.移动构造的原因 这个移动构造,或者移动拷贝赋值,有窃取资源的意思。 这个窃取资源时对于指针持有的资源来说的。 而这个窃取是通过在构造函数与重载拷贝赋值的时候,编码将当前的指针指向资源,再将原来的指针,指向nullptr实现的。 当然,你也可以不对指针这样使用,比如对于任意的类型,将其拷贝给现在的,再将原来的置为空值。 但是这样没有意义,因为相对于很大的
[C++11] 默认构造函数
类通过一个特殊的构造函数来控制默认初始化过程,这个函数就是默认构造函数,默认构造函数无需任何实参。我们可以显示的定义默认构造函数也可以让编译器为我们生成默认构造函数。默认构造函数以如下规则初始化累的数据成员: 如果存在类内初始值,用它来初始化成员。否则,默认初始化该成员。 class Sales_data { public: std::string bookNo; unsign
默认移动构造函数
我认为编译器合成的默认构造函数完成的
【C\C++学习】之十八、C++11六大函数(构造函数,移动构造函数,移动赋值操作符,复制构造函数,赋值操作符,析构函数)
在C++中,有三大函数复制控制(复制构造函数,赋值操作符,析构函数),而在C++11中,加入了移动构造函数,移动赋值操作符。我就斗胆将他们命名为六大函数好了。 一、构造函数 c++primer中说过:构造函数是特殊的成员函数,只要创建类类型的新对象,都要执行构造函数。构造函数的工作就是保证每个对象的数据成员具有合适的初始值。 构造函数与其他函数不同:构造函数和类同名,没有返回类型。 构造函
C++类的特殊成员-默认/拷贝/移动构造函数
详细讲解类的默认构造函数,拷贝/移动构造函数,以及拷贝赋值和移动赋值等操作。
移动构造-C++11
移动构造: 移动构造是C++11标准中提供的一种新的构造方法。 在现实中有很多这样的例子,我们将钱从一个账号转移到另一个账号,将手机SIM卡转移到另一台手机,将文件从一个位置剪切到另一个位置……     移动构造可以减少不必要的复制,带来性能上的提升。 有些复制构造是必要的,我们确实需要另外一个副本;而有些复制构造是不必要的,我们可能只是希望这个对象换个地方,移动一下而已。 在C++11
c++11 中的移动构造函数
在现实中有很多这样的例子,我们将钱从一个账号转移到另一个账号,将手机SIM卡转移到另一台手机,将文件从一个位置剪切到另一个位置……移动构造可以减少不必要的复制,带来性能上的提升。 l  C++11标准中提供了一种新的构造方法——移动构造。 l  C++11之前,如果要将源对象的状态转移到目标对象只能通过复制。在某些情况下,我们没有必要复制对象——只需要移动它们。 l  C++11引入移动语义
C++11中的继承构造函数
C++11中的继承构造函数
C++11 新特性之右值引用和转移构造函数
问题背景 [cpp] view plaincopy #include        using namespace std;       vectorint> doubleValues (const vectorint>& v)   {       vectorint> new_values( v.size() );       f