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

现代 C++ |C++ 基本概况 |Microsoft C/C++ 文档 学习笔记

  • 自创建以来,C++ 已经成为世界上最常用的编程语言之一。
  • C++ 可以创建任何类型的程序:游戏、设备驱动程序、云、桌面、HPC、嵌入式和移动应用等,甚至用于其他编程语言的库和编译器也使用 C++ 编写。
  • C++ 的原始要求之一是与 C 语言向后兼容。 因此,C++ 始终允许 C 样式编程,其中包含原始指针、数组、以 null 结尾的字符串和其他功能。它们可以实现良好的性能,但也可能会引发 bug 并增加复杂性。C++ 的演变注重可显著降低 C 样式惯例使用需求的功能。 如果需要,你仍可以使用旧的 C 编程设施。
  • 在新式 C++ 代码中,对上述设施的需求会越来越少。 现代 C++ 代码更加简单、安全、美观,而且速度仍像以往一样快速。

资源和智能指针

  • C 样式编程的一个主要 bug 类型是内存泄漏。 泄漏通常是由未能为使用 new 分配的内存调用 delete 导致的。
  • 现代 C++ 强调“资源获取即初始化”(RAII) 原则。 其理念很简单。 资源(堆内存、文件句柄、套接字等)应由对象“拥有”。 该对象在其构造函数中创建或接收新分配的资源,并在其析构函数中将此资源删除。 RAII 原则可确保当所属对象超出范围时,所有资源都能正确返回到操作系统。
  • 为了支持对 RAII 原则的简单采用,C++ 标准库提供了三种智能指针类型:std::unique_ptr、std::shared_ptr 和 std::weak_ptr。
  • 智能指针可处理对其拥有的内存的分配和删除。 
  • 下面的示例演示了一个类,其中包含一个数组成员,该成员是在调用 make_unique() 时在堆上分配的。 对 new 和 delete 的调用将由 unique_ptr 类封装。 当 widget 对象超出范围时,将调用 unique_ptr 析构函数,此函数将释放为数组分配的内存。
#include <memory>
class widget
{
private:
    std::unique_ptr<int[]> data;
public:
    widget(const int size) { data = std::make_unique<int[]>(size); }
    void do_something() {}
};

void functionUsingWidget() {
    widget w(1000000);  // lifetime automatically tied to enclosing scope
                        // constructs w, including the w.data gadget member
    // ...
    w.do_something();
    // ...
} // automatic destruction and deallocation for w and w.data

请尽可能地使用智能指针管理堆内存。 如果必须显式使用 new 和 delete 运算符,请遵循 RAII 原则。 

(初学C++,很多知识还不懂,我会专心学习并实践,将所有的学习成果分享到此平台。感谢支持。)


http://www.kler.cn/a/370341.html

相关文章:

  • ElasticSearch 在不同集群之间进行数据迁移
  • C++20新特性探索:概念(Concepts)与范围库(Ranges)
  • Springboot 整合 Java DL4J 实现文本分类系统
  • fio 一个 Linux 磁盘压测工具
  • 3D Gaussian Splatting学习日记
  • 【无人机设计与控制】无人机避障,路径规划
  • 推荐一款免费好用的「AI 知识库」工具,可进行RAG问答、文档分析、总结摘要等,自动进行chunk拆分与向量化
  • 树莓派使用Node.js 将蓝牙设置成BLE外设
  • 基于微信小程序实现信阳毛尖茶叶商城系统设计与实现
  • 【Android】Kotlin教程(7)
  • 提升数据处理能力:铠侠 KCD81RUG3T84 SSD 的优势解析
  • 云计算过二级等保的要求,应该怎么做?
  • CSS3简介
  • PHP+REDIS设置请求限流(设置1秒内最大请求数1000QPS)
  • 【数据结构与算法】力扣 92. 反转链表 II
  • 浅谈钓鱼攻防之道-制作免杀excel文件钓鱼
  • Spring Boot:植物健康监测的智能先锋
  • 卡方检验方法概述与类型——四格表和R*C表卡方检验案例
  • Vxe UI vue vxe-table 表格中使用下拉表格,单元格渲染下拉表格
  • AJAX——设置 CORS 响应头实现跨域