美文网首页
Move Constructor

Move Constructor

作者: 令一 | 来源:发表于2015-07-10 11:09 被阅读0次

为什么需要移动语义?

在处理临时变量时(右值),可以“窃取”对象资源,即获取指针成员的值,而避免调用copy构造函数,来copy指针对象的内容。正因为临时对象将要被销毁,也没有其他用户,所以我们可以直接窃取其资源(指针成员)。

在VS2010之后的标准库中,以下代码将分别调用移动构造函数和copy构造函数。

vector<string> vs;

vs.push_back("call move");

string str = "call copy";

vs.push_back(str);

vs.push_back(std::move(str));

类似的,我们可以在自己实现的类中定义移动构造函数和移动赋值运算符来实现上述功能来避免对临时变量的copy。

vector <myclass> vs;

for(int i = 0; i < 100; i++)

{

myclass obj;

vs.push_back(obj);                     //call copy constructor

}

for(int i = 0; i < 100; i++)

{

myclass obj;

vs.push_back(std::move(obj));    //call move constructor

}

参考: https://msdn.microsoft.com/zh-cn/library/dd293665.aspx

Questions

1) Page 455 使用引用计数来定义行为像指针的类;这样我们可以拷贝指针成员本身而不是它的内容;看起来和移动语义的目的有些类似?

2) 为什么move函数要声明成noexcept的?不是很理解page536的说法。

相关文章

  • Move Constructor

    为什么需要移动语义? 在处理临时变量时(右值),可以“窃取”对象资源,即获取指针成员的值,而避免调用copy构造函...

  • C++右值引用和移动语义学习小结

    在 C++11 之前,将一个对象移动(move)到另一个对象的通用做法只有 copy constructor 或者...

  • 【move】2.Move Tutorial

    Move 教程(Move Tutorial) Welcome to the Move Tutorial! In t...

  • 47/100

    move on move on! night–night(´• ᵕ •`)*

  • constructor()

    constructor里的this.state和直接写this.state区别?答案:没有区别 在React中co...

  • constructor

    constructor 为什么x会有constructor属性。因为每一个构造函数原型都会生成constructo...

  • constructor

    constructor 翻译:构造者、构造器语法:object.constructor 输出:function e...

  • constructor

    所有的函数都有一个prototype属性,它是一个对象。 prototype有一个constructor的属性,默...

  • Constructor

    this:继承同一类中的其它构造函数 Class Car{private string _description;...

  • constructor()

    constructor()是类的默认方法,通过new命令生成对象实例时,自动调用该方法。一个类必须有constru...

网友评论

      本文标题:Move Constructor

      本文链接:https://www.haomeiwen.com/subject/vwcuqttx.html