2,3,4,5,6,7,8,9,10,11,12,13,14
当前位置: 首页  - 作者"沐尘"  - 列表 - 第5页
Effective Modern C++24| 区分万能引用和右值引用

24| 区分万能引用和右值引用

在前面的文章讲了很多万能引用,形式如"T&&",但右值引用也可以这样表示,具体什么样的才是万能引用呢?万能引用必须涉及型别推导,且参数形式必须为“T&&”,不能带有任何其他修饰关键字(const、volatile),不是万能引用就是右值引用:template <class T>

Effective Modern C++23| 理解std::move和std::forward

23| 理解std::move和std::forward

std::move()实施的是无条件的向右值型别进行强制类型转换,而std::forward仅当实参是右值时,才会将参数转换为右值,且它们都仅仅时强制类型转换,并不做移动操作。 std::move()的使用场景没有什么好说的了,当你需要实参是右值时,执行该函数就对了,因为它可以百分百返回参数对应的右值。关于std::forward的使用

Effective Modern C++19|使用std::shared_ptr管理具备共享所有权的资源

19|使用std::shared_ptr管理具备共享所有权的资源

std::shared_ptr通过引用计数的方式实现资源共享,当计数为0时,资源将被释放,和std::unique_ptr不同的是其不能处理数组,只能处理单个对象。std::shared_ptr的尺寸是裸指针的两倍,因为其内部除了包含了一个指涉到该资源的裸指针,还包含一个指涉到该资源的一个控制块的裸指针,该控制块为动态分配在堆上,内容包含

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

点击下拉
用户登录