拷贝构造函数:又称复制构造函数,其主要作用就是复制一个已有的对象,得到一个全新的,和被复制的对象变量值相同的对象
class Base
{
public:
//Base(const Base& p)
//{
// //直接赋值,这里是浅拷贝
// this->age = p.age;
//}
Base(const Base& p)
{
//重新开辟空间,这里是深拷贝
this->age = new int(*p.age);
//直接赋值
}
int* age;
}
- 浅拷贝:直接赋值拷贝操作。
- 深拷贝:堆区空间的重新开辟,并赋值拷贝。
- 注意:
- C++中,当你写了一个类,且并没有给其中添加拷贝构造函数时,编译器会默认添加一个拷贝构造函数,其中的实现方式是浅拷贝;这也意味着如果类内有指针管理动态内存,就需要重写拷贝构造函数,并使用深拷贝构造实现。
为啥呢?
- 因为当两个不同的对象中,两个不同的指针指向同一片动态内存,那么在析构时,就会造成野指针,和内存的重复释放问题。
注:野指针是当指针指向未向系统申请可使用的内存时,访问权限冲突所造成的问题(需要重视)