QImage的浅拷贝与深拷贝 c++代码
时间: 2024-04-16 12:23:14 浏览: 233
c++种的浅拷贝与深拷贝
在C++中,QImage是Qt框架中用于处理图像的类。浅拷贝和深拷贝是关于对象拷贝的概念。
浅拷贝是指将一个对象的值复制到另一个对象,这两个对象将共享相同的数据。在浅拷贝中,只复制了指针,而没有复制指针所指向的数据。这意味着如果其中一个对象修改了共享的数据,另一个对象也会受到影响。
深拷贝是指将一个对象的值复制到另一个对象,这两个对象将拥有独立的数据。在深拷贝中,不仅复制了指针,还复制了指针所指向的数据。这样,即使其中一个对象修改了数据,另一个对象也不会受到影响。
下面是使用C++代码进行浅拷贝和深拷贝的示例:
```cpp
#include <iostream>
#include <QImage>
int main() {
// 创建原始图像
QImage originalImage("path_to_image.jpg");
// 浅拷贝
QImage shallowCopyImage = originalImage;
// 深拷贝
QImage deepCopyImage = originalImage.copy();
// 修改浅拷贝图像
shallowCopyImage.setPixelColor(0, 0, QColor(Qt::red));
// 输出原始图像的第一个像素颜色
std::cout << "Original Image Pixel Color: " << originalImage.pixelColor(0, 0).name().toStdString() << std::endl;
// 输出浅拷贝图像的第一个像素颜色
std::cout << "Shallow Copy Image Pixel Color: " << shallowCopyImage.pixelColor(0, 0).name().toStdString() << std::endl;
// 输出深拷贝图像的第一个像素颜色
std::cout << "Deep Copy Image Pixel Color: " << deepCopyImage.pixelColor(0, 0).name().toStdString() << std::endl;
return 0;
}
```
在上面的示例中,我们首先创建了一个原始图像`originalImage`。然后使用浅拷贝和深拷贝分别创建了`shallowCopyImage`和`deepCopyImage`。接着,我们修改了浅拷贝图像的第一个像素颜色,并输出了原始图像、浅拷贝图像和深拷贝图像的第一个像素颜色。
运行上述代码,你会发现原始图像和深拷贝图像的第一个像素颜色没有改变,而浅拷贝图像的第一个像素颜色变为了红色。这是因为浅拷贝只是复制了指针,而深拷贝复制了指针所指向的数据。
阅读全文