C++深浅拷贝
什么时候使用深拷贝?
当class中有指针成员的时候,构造函数中使用new在堆区中开辟内存,就得在析构函数中使用delete释放内存。使用深拷贝可以保证堆区开辟的数据不会被析构函数重复释放多次而造成内存泄漏。
使用深拷贝需要注意什么?
使用深拷贝时,如果指针不为NULL(构造函数已经将变量初始化),就应该先将指针置为空,再做深拷贝操作。
拷贝构造函数调用的时机是什么?
- 使用一个创建完毕的对象来初始化一个新对象
Person p2(p1); - 值传递的方式给参数传值
void test(Person p1) - 以值方式返回局部对象
Person test()
{
Person p;
......
return p;
}
返回引用?还是返回值
当我们要返回引用的时候,返回的是实际值,而实际在return之后就使用析构函数(如果有delete则会出现内存泄漏),比方说用operator=的时候会返回*this。
返回值的时候,系统先调用拷贝函数,再将拷贝后的值返回,而函数中本来的返回值在函数结束后被释放。
链式编程思想