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

广州比较好的网站设计贵州建设厅培训中心网站

广州比较好的网站设计,贵州建设厅培训中心网站,企业网站制作,上国外网站速度慢C 中的拷贝方式 1. 深拷贝(Deep Copy) 定义 深拷贝会复制对象的全部内容,包括对象中动态分配的资源。新对象与原对象完全独立,任何对新对象的修改都不会影响原对象。 实现 通常通过显式的拷贝构造函数或拷贝赋值运算符&#…

C++ 中的拷贝方式

1. 深拷贝(Deep Copy)

定义

深拷贝会复制对象的全部内容,包括对象中动态分配的资源。新对象与原对象完全独立,任何对新对象的修改都不会影响原对象。

实现

通常通过显式的拷贝构造函数或拷贝赋值运算符,手动分配新内存并复制资源。

示例

#include <iostream>
#include <cstring>class MyClass {char* data;public:MyClass(const char* str) {data = new char[strlen(str) + 1];strcpy(data, str);}// 深拷贝构造函数MyClass(const MyClass& other) {data = new char[strlen(other.data) + 1];strcpy(data, other.data);}~MyClass() {delete[] data;}void print() const {std::cout << data << "\n";}
};int main() {MyClass obj1("Hello");MyClass obj2 = obj1;  // 调用深拷贝构造函数obj2.print();         // 输出: Helloreturn 0;
}

特点

1.深拷贝是安全的,原对象和新对象的资源完全独立。
2.对象中有动态资源时需要手动实现深拷贝。
3.较耗费性能(特别是资源较大时)。

2. 浅拷贝(Shallow Copy)

定义

浅拷贝只复制对象中的指针或引用,而不复制它们所指向的实际资源。新对象和原对象共享同一块资源。

问题

如果不小心释放了共享的资源,会导致其他对象指向无效的内存,产生 悬挂指针(Dangling Pointer)。

示例

#include <iostream>
#include <cstring>class MyClass {char* data;public:MyClass(const char* str) {data = new char[strlen(str) + 1];strcpy(data, str);}// 默认浅拷贝(未自定义拷贝构造函数时)MyClass(const MyClass& other) = default;~MyClass() {delete[] data;}void print() const {std::cout << data << "\n";}
};int main() {MyClass obj1("Hello");MyClass obj2 = obj1;  // 浅拷贝,指向同一资源obj1.print();         // 输出: Helloobj2.print();         // 输出: Helloreturn 0;
}

特点

1.浅拷贝速度快,因为它仅复制指针的地址。
2.容易产生悬挂指针或资源泄漏问题。

3. 移动语义(Move Semantics)

定义

移动语义会将资源从一个对象“转移”到另一个对象,而不会创建或复制新的资源。原对象的资源被“搬走”,进入“有效但未定义状态”。

实现

使用移动构造函数和移动赋值运算符。

示例

#include <iostream>
#include <utility> // for std::moveclass MyClass {char* data;public:MyClass(const char* str) {data = new char[strlen(str) + 1];strcpy(data, str);}// 移动构造函数MyClass(MyClass&& other) noexcept : data(other.data) {other.data = nullptr;  // 释放原对象的所有权}~MyClass() {delete[] data;}void print() const {std::cout << (data ? data : "Empty") << "\n";}
};int main() {MyClass obj1("Hello");MyClass obj2 = std::move(obj1);  // 调用移动构造函数obj2.print();                   // 输出: Helloobj1.print();                   // 输出: Emptyreturn 0;
}

特点

1.移动语义速度快,不需要深拷贝。
2.常用于临时对象或需要高效转移资源的场景。
3.需要实现移动构造函数和移动赋值运算符。

4. 对比总结

拷贝方式深拷贝浅拷贝移动语义
实现复杂度较高,需要手动复制资源简单,默认行为需要手动实现移动构造和赋值
效率慢,涉及内存分配和复制快,只复制指针非常快,只转移资源所有权
资源独立性独立的资源副本共享资源资源被转移,独占
适用场景资源独立且需频繁复制快速拷贝,无需独立资源资源需要转移时,高效操作

5.总结

  • 深拷贝:适用于需要独立资源的场景,比如资源管理类(文件、内存等)。
  • 浅拷贝:简单但容易导致问题,仅适用于无需独立资源的情况。
  • 移动语义:是现代 C++ 的高效资源管理方式,适合转移资源的场景。
http://www.yayakq.cn/news/944729/

相关文章:

  • 济南shuncheng科技 网站建设互联网行业五行属什么
  • 冲电气软件 网站建设装修网站有哪些
  • 免费网址生成app广州seo网络营销培训
  • 郑州网站优化培训机构企业网站制作流程图
  • 可以查企业的网站突出什么 加强网站建设
  • 撰写网站的建设方案显示网站建设中
  • 河南省住房建设厅网站首页wordpress主题mirana
  • 包头建设工程安全监督站网站泰安人才网最新招聘网
  • 有免费的网站服务器吗苏宁网站开发人员
  • 网站建设公司的网销好做吗python编程快速上手
  • 网站设计的公司logo做效果图常用的网站有哪些
  • 官方网站找oem做洗发水厂家以就业为导向的高职计算机专业网站设计
  • 建设高校图书馆网站的意义莱芜话题最新消息
  • 公众号版影视网站开发东营房产信息网58同城
  • 专门做衣服的网站有哪些品牌网站建设 细致磐石网络
  • 网站开发前景知乎长沙第三方网站建设公司
  • 昆明网站建设高端定制嘉兴网站建设全包
  • 重庆大渝网首页sem优化和seo的区别
  • 帝国cms 网站地图哪里有做配音的兼职网站
  • 用什么软件做网站haohtml企业网站主页模板
  • 网站建设的专业术语wordpress手机显示不了图片
  • 免费用手机做网站网站排名优化原理
  • 手机网站样例在深圳学网站设计
  • 印刷做网站网上接单免费文档模板网站
  • 如何建立网站做微商软件网站开发
  • 怎么用html做图片展示网站商城微信网站怎么做
  • 佛山做网站公司有哪些网站栏目策划 有思想的新闻
  • 做阿里巴巴类似的网站吗百度收录怎么做
  • wamp可以做视频网站吗中信建设有限责任公司企查查
  • 桐庐营销型网站建设wordpress role