网站建设工作室07fly,网站收录后然后怎么做,住房建设和城乡管理局官网,张家口职教中心计算机网站建设文章目录1.拷贝构造函数2.移动构造函数1.拷贝构造函数 拷贝构造函数#xff0c;它是一种特殊的构造函数。它的作用就是用一个已经生成的对象来初始化另一个同类的对象。 当类中拥有指针类型的成员变量时#xff0c;拷贝构造函数中需要以深拷贝#xff08;而非浅拷贝#xf…
文章目录1.拷贝构造函数2.移动构造函数1.拷贝构造函数 拷贝构造函数它是一种特殊的构造函数。它的作用就是用一个已经生成的对象来初始化另一个同类的对象。 当类中拥有指针类型的成员变量时拷贝构造函数中需要以深拷贝而非浅拷贝的方式复制该指针成员。 浅复制仅仅是指向被复制的内存地址如果原地址中对象被改变了那么浅复制出来的对象也会相应改变。深复制在计算机中开辟了一块新的内存地址用于存放复制的对象。 浅层复制之所以危险是因为两个指针共同指向一片内存空间若第一个指针将其释放另一个指针的指向就不合法了。 深拷贝
#includeiostream
using namespace std;class base {
public:base(int value1,int value2) :p(new int),num(value2) {*p value1;}base(const base b) :p(new int), num(b.num) {*p *(b.p);}//深拷贝/*base(const base b) :p(b.p), num(b.num) {}//浅拷贝*/void print() {cout *p *p num num endl;}~base() {delete p;}
private:int* p;int num;
};int main()
{base b1(10, 20);b1.print();base b2(b1);b2.print();return 0;
}*p10 num20
*p10 num20浅拷贝
#includeiostream
using namespace std;class base {
public:base(int value1,int value2) :p(new int),num(value2) {*p value1;}/*base(const base b) :p(new int), num(b.num) {*p *(b.p);}//深拷贝*/base(const base b) :p(b.p), num(b.num) {}//浅拷贝void print() {cout *p *p num num endl;}~base() {delete p;}
private:int* p;int num;
};int main()
{base b1(10, 20);b1.print();base b2(b1);b2.print();return 0;
}2.移动构造函数 所谓移动语义指的就是以移动而非深拷贝的方式初始化含有指针成员的类对象。简单的理解移动语义指的就是将其他对象通常是临时对象拥有的内存资源“移为已用”。 拷贝构造函数中对于指针我们一定要采用深层复制而移动构造函数中对于指针我们采用浅层复制。 移动构造函数的参数和拷贝构造函数不同拷贝构造函数的参数是一个左值引用但是移动构造函数的初值是一个右值引用。意味着移动构造函数的参数是一个右值或者将亡值的引用。也就是说只用用一个右值或者将亡值初始化另一个对象的时候才会调用移动构造函数。而那个move语句就是将一个左值变成一个将亡值。 #includeiostream
using namespace std;class base {
public:base(int value1,int value2) :p(new int),num(value2) {*p value1;}/*base(const base b) :p(new int), num(b.num) {*p *(b.p);}//深拷贝拷贝构造函数*/base(base b) :p(b.p), num(b.num) {b.p NULL;}//移动构造函数void print() {cout *p *p num num endl;}~base() {delete p;}
private:int* p;int num;
};int main()
{base b1(10, 20);b1.print();base b2(b1);b2.print();return 0;
}*p10 num20
*p10 num20