当前位置: 首页 > news >正文

做速卖通要关注的几个网站wordpress幻灯片制作

做速卖通要关注的几个网站,wordpress幻灯片制作,怎样免费做书画网站,品牌网站建设风格怎么确定浅拷贝 浅拷贝就是单纯拷贝指向该对象的内存,所以在进行多次浅拷贝后只是相当于多了几个指向同一个对象的指针,而深拷贝相当于完全复制了一个对象副本。浅拷贝指的是复制对象的所有成员变量的值,不管这些值是指针、基本数据类型还是其他对象…

浅拷贝

浅拷贝就是单纯拷贝指向该对象的内存,所以在进行多次浅拷贝后只是相当于多了几个指向同一个对象的指针,而深拷贝相当于完全复制了一个对象副本。浅拷贝指的是复制对象的所有成员变量的值,不管这些值是指针、基本数据类型还是其他对象,但当涉及到指针时,浅拷贝只会复制指针的值(即地址),而不是它所指向的数据,这可能会导致多个对象共享相同的数据。这与深拷贝相反,深拷贝会创建原对象指针所指向的数据的一个新副本。

默认的拷贝构造函数和赋值运算符实现的就是浅拷贝。因此,如果你不为类提供自定义的拷贝构造函数和赋值运算符,编译器会为你提供默认的实现,这就是浅拷贝。

以下是一个简单的浅拷贝的例子:

#include <iostream>class ShallowCopy {
public:int* data;ShallowCopy(int d) {data = new int(d);}// 使用编译器生成的默认拷贝构造函数// ShallowCopy(const ShallowCopy& src) = default;// 使用编译器生成的默认赋值运算符// ShallowCopy& operator=(const ShallowCopy& src) = default;~ShallowCopy() {delete data;}
};int main() {ShallowCopy obj1(10);ShallowCopy obj2 = obj1; // 这里进行了浅拷贝std::cout << *obj1.data << " " << *obj2.data << std::endl; // 输出: 10 10*obj1.data = 20;std::cout << *obj1.data << " " << *obj2.data << std::endl; // 输出: 20 20return 0;
}

在上面的例子中,当obj2是通过obj1的拷贝构造函数创建的时,进行的是浅拷贝,所以obj1.dataobj2.data都指向相同的地址。因此,改变其中一个也会影响到另一个。

注意:浅拷贝通常是不安全的,特别是当类中有动态分配的资源时。在上面的例子中,当obj1obj2都析构时,它们都会尝试释放同一块内存,这会导致未定义的行为。为了避免这种情况,你通常需要实现深拷贝或者使用智能指针来管理资源。

深拷贝

在C++中,深拷贝意味着当对象被拷贝时,不仅复制对象的所有成员变量值,而且还复制其指针成员变量所指向的数据。这与浅拷贝相反,浅拷贝只会复制指针的值而不是其所指向的数据,可能导致多个对象共享相同的数据。

为了实现深拷贝,你通常需要为类提供自定义的拷贝构造函数和赋值运算符,并在其中对指针成员进行深拷贝。

下面是一个深拷贝的示例:

#include <iostream>class DeepCopy {
private:int* data;public:DeepCopy(int d) {data = new int(d);}// 自定义拷贝构造函数,实现深拷贝DeepCopy(const DeepCopy& src) {data = new int(*(src.data));}// 自定义赋值运算符,实现深拷贝DeepCopy& operator=(const DeepCopy& src) {if (this == &src) {return *this;  // 处理自赋值的情况}delete data; // 删除当前对象的资源// 为当前对象分配新的资源,并拷贝内容data = new int(*(src.data));return *this;}~DeepCopy() {delete data;}// Getter for demonstration purposesint getData() const {return *data;}
};int main() {DeepCopy obj1(10);DeepCopy obj2 = obj1; // 使用自定义拷贝构造函数,实现深拷贝std::cout << obj1.getData() << " " << obj2.getData() << std::endl; // 输出: 10 10// 修改obj2的内容DeepCopy obj3(30);obj2 = obj3;std::cout << obj1.getData() << " " << obj2.getData() << " " << obj3.getData() << std::endl; // 输出: 10 30 30return 0;
}

在上面的例子中,深拷贝确保了当一个对象被拷贝或分配时,每个对象都有其自己独立的资源副本,这避免了多个对象共享相同的资源。

http://www.yayakq.cn/news/404803/

相关文章:

  • 网站开发项目终止协议书龙岗网站制作效果
  • 音频网站开发化妆品网站设计开题报告
  • html用表格来做网站布局网站建设方案申请
  • 网站网页设计htmlwordpress 旅游
  • 模板网站如何做seo下关汇做网站的公司
  • 网站自适应手机中轻成都设计院
  • 动态门户网站建设价格院网站建设情况报告
  • 韩国免费行情网站的推荐理由网络管理系统软件有哪些
  • 微网站开发外包莱芜论坛的最新帖子
  • 盐城建设局网站手机app可以做网站吗
  • 繁体企业网站源码网站改版中
  • 做做网站2023下载城市焦点商城网站建设案例
  • 网站开发培训视频上海做网站推广关键词
  • 东莞网站建设aj工作室儿童网站模板 html
  • 门户网站制作企业辽宁建设工程信息网新平台
  • iis怎么给网站设置权限自助外贸网站建设
  • 专门做本子的网站南康网站建设南康
  • 深圳贷款网站建设智联招聘网站怎么做微招聘信息
  • 网站公司简介模板做系统软件的网站
  • 邵阳网站建设设计西安网络公司推荐
  • 专注合肥网站推广唐山微网站建设价格
  • 武进区城乡建设局网站德州手机网站建设
  • 高级室内设计网站aso优化师工作很赚钱吗
  • 甘肃省交通建设集团有限公司网站杭州网站关键词排名
  • 赵公口网站建设北京网站设计网站模板分什么类型
  • 网站设计对网站建设有哪些意义?古风wordpress
  • 免费网站建设一级免费单页网站建设
  • 闸北建设机械网站麦进斗网站建设
  • 自动生成前端页面工具苏州优化件
  • 怎么接网站建设的单子...课程网站建设简介