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

打印 上一主题 下一主题

主题 1498|帖子 1498|积分 4494

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x

  • 自创建以来,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 析构函数,此函数将开释为数组分配的内存。
  1. #include <memory>
  2. class widget
  3. {
  4. private:
  5.     std::unique_ptr<int[]> data;
  6. public:
  7.     widget(const int size) { data = std::make_unique<int[]>(size); }
  8.     void do_something() {}
  9. };
  10. void functionUsingWidget() {
  11.     widget w(1000000);  // lifetime automatically tied to enclosing scope
  12.                         // constructs w, including the w.data gadget member
  13.     // ...
  14.     w.do_something();
  15.     // ...
  16. } // automatic destruction and deallocation for w and w.data
复制代码
请尽可能地使用智能指针管理堆内存。 如果必须显式使用 new 和 delete 运算符,请遵循 RAII 原则。 
(初学C++,许多知识还不懂,我会专心学习并实践,将所有的学习效果分享到此平台。感谢支持。)


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

圆咕噜咕噜

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表