网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
拷贝构造函数时,因为类中的数据是指针类型所以在赋值的时候需要重新在堆上创建一个空间,在赋值。而不能直接进行赋值
而移动构造函数的目的就是将原对象的东西移动到新对象上面,所以直接赋值就行,但是需要将原对象的指向变为空。
代码如下:
#include<iostream>
using namespace std;
class A{
public:
A(){
this->num = new int(10);
cout << "构造函数" << endl;
}
A(A&x){
this->num = new int(*x.num);
cout << "拷贝构造函数" << endl;
}
A(A&&x){
this->num = x.num;
x.num = nullptr;
cout << "移动构造函数" << endl;
}
~A(){
cout << "析构函数" << endl;
}
int *num;
};
void test(){
A a;
A b=a;
A c(move(a));
}
int main()
{
test();
system("pause");
return 0;
}
运行结果:
移动赋值
从这个引出了移动赋值函数:这个和上面的类似
也是将原对象的东西赋值给新对象,然后原对象指向空
void operator = (A && x){
this->num = x.num;
x.num = nullptr;
cout << “移动赋值函数” << endl;
}
void operator = (A & x){
this->num = new int(*x.num);
cout << “operator=” << endl;
}
跟上面的方法类似,调用方法:
A b;
b = a; //使用operator=
A c;
c = move(a); //使用移动赋值函数
代码:
#include<iostream>
using namespace std;
class A{
public:
A(){
this->num = new int(10);
cout << "构造函数" << endl;
}
void operator = (A && x){
this->num = x.num;
x.num = nullptr;
![img](https://img-blog.csdnimg.cn/img_convert/e917b93d72e00c9f3d469094cffd95e7.png)
![img](https://img-blog.csdnimg.cn/img_convert/91d0718e1992ee90d8b1365e946b081f.png)
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618668825)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
/bbs.csdn.net/topics/618668825)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**