赞
踩
深拷贝是一种对象拷贝方式,它会创建一个新的对象,并将原始对象中的所有数据成员复制到新的对象中,包括多态分配内存。这意味着在深拷贝后,原始对象和新的对象是完全独立的,对一个对象的修改不会影响到另一个对象。深拷贝通常使用在涉及到动态分配内存的情况下,例如对象中包含指针或动态分配的数组等。
以下是一个深拷贝的示例:
- class MyString {
- public:
- // 构造函数
- MyString(const char* str) {
- size = strlen(str);
- data = new char[size + 1];
- strcpy(data, str);
- }
-
- // 拷贝构造函数,实现深拷贝
- MyString(const MyString& other) {
- size = other.size;
- data = new char[size + 1];
- strcpy(data, other.data);
- }
-
- private:
- int size;
- char* data;
- };
浅拷贝是一种对象拷贝方式,它只是简单地将原始对象的内存内容按位复制到新的对象中,包括指针的复制,而不会创建新的内存空间。这意味着原始对象和新的对象会共享同一块内存,对一个对象的修改可能会影响到另一个对象。浅拷贝通常使用在对象中没有涉及到动态分配内存的情况下。
以下是浅拷贝的示例:
- class MyArray {
- public:
- // 构造函数
- MyArray(int size) {
- this->size = size;
- data = new int[size];
- }
-
- // 拷贝构造函数,实现浅拷贝
- MyArray(const MyArray& other) {
- size = other.size;
- data = other.data; // 浅拷贝,将指针复制给新对象
- }
-
- private:
- int size;
- int* data;
- };
需要注意的是,如果一个类中包含了指针或者其他资源,需要谨慎处理对象的拷贝,以避免内存泄漏或者未定义行为。在实现类的拷贝构造函数和赋值操作符时,根据具体情况选择深拷贝还是浅拷贝,以确保对象拷贝行为的正确性和安全性。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。