2,3,4,5,6,7,8,9,10,11,12,13,14
当前位置: 首页  - 读书笔记  - Effective Modern C++  - 列表 - 第2页

Effective Modern C++

Effective Modern C++18 |使用std::unique_ptr管理具备专属所有权的资源

18 |使用std::unique_ptr管理具备专属所有权的资源

当需要使用智能指针时,std::unique_ptr基本上应当是首选,因为默认情况下std::unique_ptr和裸指针有着相同的尺寸,且对于大多数的操作(包括提领),他们都是精确的执行了相同的指令。std::unique_ptr实现的是专属所有权语义,其只支持移动,不支持复制,也不能将一个裸指针直接赋值给std::unique_ptr

Effective Modern C++17 |理解特种成员函数的生成机制

17 |理解特种成员函数的生成机制

这里所说的特种成员函数包括C++98已有的默认拷贝函数、析构函数、复制构造函数、复制赋值运算符以及C++11新增的移动构造函数以及移动赋值运算符。这些特种成员函数在特定场合,编译器都可以自动为其生成,且访问权限都是public的,inline类型的。以下几点是特种成员函数生成的特点:仅当一个类没有声明任何构造函数时,编译器才会自动生成默

Effective Modern C++16 |保证const成员函数的线程安全性

16 |保证const成员函数的线程安全性

我们知道const成员函数不会修改成员变量,即对变量进行只读操作,但是即使是只读,其函数真的是安全的吗?例如,我们在一个成员函数内获取某个对象的一个变量的值,其值在第一次和第二次读取有差异,代码如下:class MyClass{public:void Init() const {if (!Init

Effective Modern C++13 |优先选用const_iterator,而非iterator

13 |优先选用const_iterator,而非iterator

在C++98中 const_iterator得到的支持不够全面,使用起来相当费力,C++11对其做了一个很大的优化,但是仍然有死角,但是C++14将这些死角清除干净了,所以现在我们可以很好的使用它。首先我们要记住的是在C++11中无法将iterator强制转换为const_iterator,即使是static_cast或者reinterp

Effective Modern C++12| 为意在改写的函数后添加override声明

12| 为意在改写的函数后添加override声明

override声明的作用很简单,就是当你为子类改写从父类那里继承下来的成员函数时,如果因为各种原因,导致改写失败(失败原因有很多,例如形参类型错误、函数修饰词遗漏等等),将在编译时给你明确提示。除了这个知识点,这里另外再介绍一个知识点,就是引用修饰词:

Effective Modern C++11 |优先选用delete删除函数,而非private未定义函数

11 |优先选用delete删除函数,而非private未定义函数

如果你实现了某个类给其他程序猿使用,但是不想让他使用某个特定函数,那我们可以直接不声明该函数即可。但是如果这个函数是编译器自动生成的,例如默认赋值函数,那我们又应该怎么做呢?C++98中的做法是将该函数声明为private权限,这样就阻止了外部直接调用它,然后我们也不去定义它,这样当该类的成员函数误调用该函数时,会提示链接错误。例如:cl

点击下拉
用户登录