如何在c++项目中移动构造-创新互联

如何在c++项目中移动构造?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

创新互联是一家专注于网站建设、网站制作与策划设计,河北网站建设哪家好?创新互联做网站,专注于网站建设十载,网设计领域的专业建站公司;建站业务涵盖:河北等地区。河北做网站价格咨询:028-86922220

移动构造


  • 什么时候该触发移动构造?

                有可被利用的临时对象

  • 移动构造函数:

   class_name ( class_name && )

//例:函数返回含有指针成员的对象(版本1)

//使用深层复制构造函数

//返回时构造临时对象,动态分配将临时对象返回到主调函数,然后删除临时对象。

#include

using namespace std;

class IntNum {

public:

  IntNum(int x = 0) : xptr(new int(x)){ //构造函数

    cout << "Calling constructor..." << endl;

   }

  IntNum(const IntNum & n) : xptr(new int(*n.xptr)){//复制构造函数

    cout << "Calling copy constructor..." << endl;

  };

  ~IntNum(){ //析构函数

    delete xptr;

    cout << "Destructing..." << endl;

  }

  int getInt() { return *xptr; }

private:

  int *xptr;

};

//返回值为IntNum类对象

  IntNum getNum() {

    IntNum a;

    return a;

  }

int main() {

  cout<
//例:函数返回含有指针成员的对象(版本2)

//使用移动构造函数

//将要返回的局部对象转移到主调函数,省去了构造和删除临时对象的过程。

#include

using namespace std;

class IntNum {

public:

  IntNum(int x = 0) : xptr(new int(x)){ //构造函数

    cout << "Calling constructor..." << endl;

  }

  IntNum(const IntNum & n) : xptr(new int(*n.xptr)){//复制构造函数

    cout << "Calling copy constructor..." << endl;

   //注:

  //•&&是右值引用

  //•函数返回的临时变量是右值

  }

  IntNum(IntNum && n): xptr( n.xptr){ //移动构造函数

    n.xptr = nullptr;

    cout << "Calling move constructor..." << endl;

  }

  ~IntNum(){ //析构函数

    delete xptr;

    cout << "Destructing..." << endl;

  }

private:

  int *xptr;

};

//返回值为IntNum类对象

  IntNum getNum() {

  IntNum a;

  return a;

}

int main() {

  cout << getNum().getInt() << endl; return 0;

}

//运行结果:

Calling constructor...

Calling move constructor...

Destructing...

0

Destructing...

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联网站建设公司,的支持。


本文题目:如何在c++项目中移动构造-创新互联
本文地址:http://pwwzsj.com/article/jhdjp.html