Qt 对象深拷贝和浅拷贝举例

在Qt中,对象的拷贝可以分为浅拷贝(Shallow Copy)和深拷贝(Deep Copy)两种。下面是两种拷贝的示例代码和解释:

1. 浅拷贝(Shallow Copy)

浅拷贝是指将对象的成员变量的值直接复制给另一个对象。两个对象共享相同的数据。如果原始对象的数据发生变化,拷贝对象的数据也会随之变化。Qt的许多类都默认使用了浅拷贝。

class Person {
    
    
public:
    QString name;
    int age;
};

Person p1;
p1.name = "Alice";
p1.age = 25;
Person p2 = p1; // 浅拷贝,p2与p1共享相同的数据

上述代码中,p1和p2是相同类型的Person对象,当进行浅拷贝时,p2的name和age成员变量会直接复制自p1。这意味着p1和p2都指向相同的实际数据,如果更改其中一个对象的数据,另一个对象的数据也会相应地更改。

2. 深拷贝(Deep Copy):

深拷贝是指创建一个新的对象,并将原始对象的成员变量的值复制到新对象中。两个对象拥有自己独立的数据副本,互不影响。

class Person {
    
    
public:
    QString name;
    int age;
};

Person p1;
p1.name = "Alice";
p1.age = 25;
Person p2;
p2.name = p1.name; // 深拷贝,p2有自己的name数据副本
p2.age = p1.age;   // 深拷贝,p2有自己的age数据副本

在上述代码中,p1和p2是相同类型的Person对象。进行深拷贝时,需要逐个复制p1的成员变量到p2的成员变量中。这样,p1和p2都拥有独立的数据副本,彼此之间的更改互不影响。

需要注意的是,对于Qt的某些类,它们已经实现了拷贝构造函数和赋值运算符重载,以正确处理深拷贝。但是对于自定义的类或处理裸指针等情况,则需要手动实现深拷贝的逻辑,以确保数据的独立性。


猜你喜欢

转载自blog.csdn.net/m0_45463480/article/details/132582704
今日推荐