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

网站一直不收录自己创建一个公司

网站一直不收录,自己创建一个公司,前端接私活一个页面多少钱,宁波方太集团网站建设C 现代C编程艺术3-移动构造函数 文章目录C 现代C编程艺术3-移动构造函数场景1&#xff1a;动态数组资源转移 #include <iostream> #include <vector> class DynamicArray { int* data; size_t size; public: // 移动构造函数&#xff08;关键实现&#xf…

C++ 现代C++编程艺术3-移动构造函数

文章目录

  • C++ 现代C++编程艺术3-移动构造函数

场景1:动态数组资源转移

#include <iostream>  
#include <vector>  class DynamicArray {  int* data;  size_t size;  
public:  // 移动构造函数(关键实现)  DynamicArray(DynamicArray&& other) noexcept  : data(other.data), size(other.size) {  other.data = nullptr;  // 切断原对象资源所有权  other.size = 0;  std::cout << "移动构造触发\n";  }  // 传统深拷贝构造(对比用)  DynamicArray(const DynamicArray& other) : size(other.size) {  data = new int[size];  memcpy(data, other.data, size * sizeof(int));  std::cout << "深拷贝构造触发\n";  }  // 构造函数与析构函数  DynamicArray(size_t s) : size(s), data(new int[s]) {}  ~DynamicArray() { delete[] data; }  
};  // 使用场景  
int main() {  DynamicArray arr1(1e6);  // 创建含100万个int的数组  // 场景A:触发移动构造  DynamicArray arr2 = std::move(arr1);  // 无内存复制  // 场景B:触发深拷贝构造(对比)  DynamicArray arr3 = arr2;             // 需要复制100万int  // 场景C:STL容器优化  std::vector<DynamicArray> vec;  vec.push_back(DynamicArray(1e6));  // 自动调用移动构造(无拷贝)  
}  

输出结果:

移动构造触发  
深拷贝构造触发  
移动构造触发  

场景2:文件句柄所有权转移

#include <fstream>  class FileWrapper {  std::fstream file;  
public:  // 移动构造函数  FileWrapper(FileWrapper&& other) noexcept : file(std::move(other.file)) {  std::cout << "文件句柄已转移\n";  }  explicit FileWrapper(const std::string& path) {  file.open(path, std::ios::in);  }  // 禁用拷贝  FileWrapper(const FileWrapper&) = delete;  
};  void processFile(FileWrapper f) { /* 文件处理逻辑 */ }  int main() {  FileWrapper f1("data.txt");  processFile(std::move(f1));  // 转移句柄所有权  // 此时f1.file 已处于关闭状态  
}  

场景3:高性能字符串拼接

class StringBuilder {  char* buffer;  size_t capacity;  
public:  // 移动构造函数  StringBuilder(StringBuilder&& src) noexcept  : buffer(src.buffer), capacity(src.capacity) {  src.buffer = nullptr;  src.capacity = 0;  }  StringBuilder operator+(StringBuilder&& rhs) {  // 移动语义实现高效拼接  this->append(std::move(rhs));  return std::move(*this);  }  
};  // 使用示例  
StringBuilder s1 = StringBuilder(100);  
StringBuilder s2 = StringBuilder(200);  
auto s3 = s1 + std::move(s2);  // 零拷贝拼接  

关键原理总结

操作类型资源行为时间复杂度适用场景
深拷贝构造完全复制资源O(n)需要独立副本的对象
移动构造指针/句柄所有权转移O(1)临时对象、大型资源转移

开发注意事项

  1. noexcept声明:移动构造函数必须标记noexcept,否则STL容器(如vector扩容)仍会使用拷贝
  2. 对象状态管理:移动后的源对象应处于可析构但不可用的状态(如指针置空)
  3. 与右值引用联动:通过std::move或返回临时对象触发移动语义
  4. 禁用拷贝控制:对不可复制的资源(如文件锁),需同时=delete拷贝构造函数

性能实测对比(1GB数据操作)

操作耗时(ms)内存峰值(MB)
传统拷贝构造22002048
移动构造0.51024

通过移动构造可降低 99.98% 的时间消耗和 50% 的内存占用(测试环境:Intel i7-12700K,32GB DDR5)。

http://www.dtcms.com/a/430176.html

相关文章:

  • 自己创建个人免费网站html友情链接
  • 群站wordpress上海网站建设制作公司
  • 服装公司网站多少钱网站开发+百度编辑器
  • 网站建设网上学怎样做网站分析
  • 一站式企业建站制作网站开发不满意
  • 寿光网站制作55g游戏网
  • 水利工程建设信息网站wordpress占用内存
  • 试玩网站设计建设wordpress html5 主题
  • 建设营销网站多少钱长春火车站到龙嘉机场动车时刻表
  • 个人网站建设的目标外贸网站推广计划书
  • 青岛网站设计公司排名青岛网站搭建公司
  • 电影模板哪个网站好二级目录 Wordpress
  • 设计公司网站建设需要多少钱培训前端网站开发
  • 深圳市seo网站设计哪家好海北wap网站建设
  • 苏州企业网站建设网络服务学校官网
  • 网站建设要具备那些住房和城乡建设官网
  • react网站开发介绍浙江省财务开发公司官网
  • 黑河百姓网免费发布信息网网站seo的主要优化内容
  • 湖南好搜网站建设公众号链接制作
  • 网站建设的目标是什么 提供了哪些栏目深圳福田口岸
  • 护肤品 网站建设策划做网站哪一家比较好
  • 网站建设的目标用户网站空间与服务器的区别
  • 公关策划公司网站源码数码网站名
  • 网站开发和网络开发区别seo可以提升企业网站的
  • 怎么注册自己网站wordpress 幻灯片 插件下载
  • 网站推广怎么做有效果杭州网站建设公司排名
  • 如何查看网站开发商石家庄网站建设seo公司
  • 外贸一站式推广服务网站开发流程任务
  • 做网站运维应该看的书主机屋wordpress建站
  • 苏州工业园区规划建设局网站哈尔滨门户网站设计报价