对于一个普通变量之间的赋值可以用一下实现:
int a = 100;
Int b = a;
这样就完成了简单的普通变量的赋值;
在类中我们已经完成了用构造函数初始化类对象,那么我们同样可以类似普通变量赋值一样,用类对象初始化一个新的类对象。例如:
(一) 类不含指针的复制传递
我们可以得到如下结果:
通过上述完成了赋值的功能;其实在我们自己不定义拷贝函数时,系统编译时提供默认构造函数,此例中是:
一般而言,默认的拷贝函数只能将传递进来的类对象的成员变量的值赋值给了新对象的成员变量;但是对于原来的类对象成员变量存储指针的话,那么新对象成员变量也是指针,赋值时将指针地址赋给新对象,故二者指向相同的内存地址。原来的对象内存释放(即析构)时,将成员变量指向的内存就消失了;由于此内存归属不清,新对象的指针成员就成为野指针了。
(二)深层拷贝函数
拷贝函数名称须与类名相同,且有一个常数型引用变量。
深层拷贝,会将原来对象指针所指向的值传递给新对象。例如:
【转载部分文字】
深拷贝和浅拷贝的定义可以简单理解成:如果一个类拥有资源(堆,或者是其它系统资源),当这个类的对象发生复制过程的时候,这个过程就可以叫做深拷贝,反之对象存在资源,但复制过程并未复制资源的情况视为浅拷贝。
浅拷贝资源后在释放资源的时候会产生资源归属不清的情况导致程序运行出错。