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

临沂网站改版学习网首页

临沂网站改版,学习网首页,给网站公司做网站,手机网站设计公司哪家好智能指针 智能指针: C11引入了四种智能指针: auto_ptr(已弃用)、unique_ptr、shared_ptr和weak_ptr。智能指针可以更有效地管理堆内存,并避免常见的内存泄漏问题。 shared_ptr: 自定义删除器。 shared_ptr使用引用计数来管理它指向的对象的生命周期。多个shared_ptr实例可以指向…智能指针 智能指针: C11引入了四种智能指针: auto_ptr(已弃用)、unique_ptr、shared_ptr和weak_ptr。智能指针可以更有效地管理堆内存,并避免常见的内存泄漏问题。 shared_ptr: 自定义删除器。 shared_ptr使用引用计数来管理它指向的对象的生命周期。多个shared_ptr实例可以指向同一个对象,只有最后一个shared_ptr被销毁时,该对象才会被销毁。使用shared_ptr要注意的问题  不要用一个原始指针初始化多个shared_ptr不要在函数实参中创建shared_ptr因为编译器差异没有明确指定参数顺序。 function(shared_ptrint(new int), g()); //有缺陷 通过shared_from_this()返回this指针。 解决引发两次析构问题底层就是使用weak_ptr class A: public std::enable_shared_from_thisA shared_ptrAGetSelf() {//return shared_ptrA(this); // 不要这么做return shared_from_this(); // 正确方式 }   避免循环引用 A:shared_ptr B:shared_ptr 问题A-B B-A 这种情况会导致内存泄漏析构只进行-1次引用计数。解决A:shared_ptr B:weak_ptr 即可 unique_ptr: unique_ptr是一种独占式的智能指针,不允许复制,但可以移动。它适用于管理应该有单一所有者的资源。讨论了unique_ptr和shared_ptr之间的差异,如数组支持和自定义删除器。使用shared_ptr要注意的问题 初始化灾难。new T会造成重复类型声明。代码可读性差 unique_ptrT my_ptr(new T); unique_ptrT my_other_ptr my_ptr; // 报错不能复制// 方法1重复类型不推荐 std::unique_ptrComplexObject obj1(new ComplexObject(10, example) );// 方法2避免重复推荐 auto obj2 std::make_uniqueComplexObject(10, example);// 重复类型声明的潜在问题 // - 编译器需要多次处理相同类型 // - 增加编译时间 // - 可能导致目标代码膨胀 数组支持。 std::unique_ptrint [] ptr(new int[10]);ptr[9] 9;std::shared_ptrint [] ptr2(new int[10]); // 这个是不合法的 删除器区别。需要指定删除器类型 std::shared_ptrint ptr3(new int(1), [](int *p){delete p;}); // 正确 std::unique_ptrint ptr4(new int(1), [](int *p){delete p;}); // 错误// 方法2自定义更复杂的分配 auto customDeleter [](int* p) { // 可以添加额外的清理逻辑delete[] p; };auto ptr2 std::unique_ptrint[], decltype(customDeleter)(new int[5](), customDeleter ); weak_ptr: weak_ptr是一种非拥有式的智能指针,用于观察由shared_ptr管理的对象的生命周期。它用于打破循环引用,防止内存泄漏。涵盖了基本用法、将this指针返回为weak_ptr以及解决循环引用问题。 举个例子监视某内存的释放。 std::weak_ptrint gw;void f(){if(gw.expired()) {cout gw无效,资源已释放;}else {auto spt gw.lock();cout gw有效, *spt *spt endl;}}int main(){{auto sp atd::make_sharedint(42);gw sp;f();}f();return 0;} weak_ptr使用注意事项 weak_ptr在使用前需要检查合法性。在使用wp前需要调用wp.expired()函数判断一下 智能指针安全性: 智能指针通常是安全的,但在多线程访问同一个shared_ptr对象时需要考虑线程安全性。当每个线程有自己的shared_ptr实例时,只要底层数据相同就是安全的。 右值引用和移动语义 关键点总结 左值可取地址的持久对象右值临时对象不可取地址。 比如临时变量字面量常量  右值的关键特征 不可取地址只能出现在赋值表达式右侧没有持久的内存位置可以被移动但不能被修改通常是临时的、短暂的对象右值引用可以延长临时对象生命周期std::move 无条件地将对象转换为右值移动语义避免不必要的深拷贝万能引用可以接受左值和右值 templatetypename T // 引用折叠规则 // T - T // T - T // T - T // T - T void forwardingFunc(T arg) {// arg 可能是左值引用或右值引用someFunc(std::forwardT(arg)); }void testUniversalRef() {int x 10;forwardingFunc(x); // T 推导为 intforwardingFunc(10); // T 推导为 int } C11 在性能上做了很大的改进最大程度减少了内存移动和复制通过右值引用、 forward、 emplace 和一些无序容器我们可以大幅度改进程序性能。 右值引用仅仅是通过改变资源的所有者来避免内存的拷贝能大幅度提高性能。 forward 能根据参数的实际类型转发给正确的函数。 emplace 系列函数通过直接构造对象的方式避免了内存的拷贝和移动。 无序容器在插入元素时不排序提高了插入效率不过对于自定义 key 时需要提供 hash 函数和比 较函数 匿名函数lambda ​​​​​​​ 迭代器 使用一个 iterator 对象来指向一个可以修改的容器元素使用一个 const_iterator 对象来指向一个不能 修改 的容器元素。 每种容器所支持的迭代器类型决定了这种容器是否可以在指定的 STL 算 法中使用。  const只能读reverser是反向。正常使用都是iterator。 详细了解 C 参考手册 - cppreference.com C面试常见题目7_STL之map与unordered_map红黑树VS哈希表_map 和unordermap区别面试-CSDN博客 学习资料分享 0voice · GitHub
http://www.hkea.cn/news/14373152/

相关文章:

  • 一个人 建设网站网站网络优化服务器
  • 微网站促销版珠海培训网站建设
  • 成都网站制作软件制作网页的网站推荐
  • 2021年10月新闻摘抄淄博网站制作网页优化
  • 贵阳市白云区官方网站东莞企业网站找谁
  • 好的建设网站大型网站故障
  • 申请网站官网响应式网站模板怎么做
  • 互联网推广网站建设网站开发入那个科目
  • 合肥建设网官方网站wordpress做后端
  • 成都人高清影院品牌加盟长沙网站优化外包服务
  • 网站策划需要什么北京高端网站建设制作设计
  • 北京企业网站开发多少钱怎么推广销售
  • 手机触屏网站模板建筑公司电话号码
  • 商务网站建设概念wordpress 漫画网站
  • 大学 建网站襄阳南漳县城乡建设局网站
  • 浙江建设网官方网站企业营销策略分析论文
  • 浦口国家建设部网站北京好网站制作公司哪家好
  • 自己怎么做系统网站网络广告图片
  • 简洁大方的电商网站模板企业网站用视频做首页
  • 网站建设的主要功能有哪些网络广告包括
  • 做网站策划桂林生活网官网二手房
  • 遵义网站建设方案wordpress添加底部导航
  • 网站怎么做购物车wordpress 收录插件
  • 外贸网站如何做的好处深圳世茂前海中心
  • 杭州网站优化多少钱怎么做告白网站
  • 网站公司排行榜前十名杭州哪家做企业网站
  • 关于网站设计pc网站开发微信支付
  • 如何选择网站项目营销型网站更受用户欢迎的原因是
  • 网站SEO基础代做烟台网站建设精通臻动传媒
  • 邢台网站建设开发关键词检测工具