C++11 中存在 3 个智能指针,分别是 unique_ptr、shared_ptr、weak_ptr,其他文章中已经讲解前 2 个智能指针的用法,本篇文章从以下3 个方面来讲解 weak_ptr 的使用: 1. w...
智能指针的工厂函数是一个创建智能指针的函数,用于方便地创建特定类型的智能指针对象,这些函数通常都是以 make 开头的函数。比如 1. make_unique std::make_unique 是一个 C++14 中引入...
定点小数是一种用固定位数表示小数部分的数值表示方法。在定点小数中,小数点的位置是固定的,不像浮点数那样可以在数字中的不同位置浮动。 1. 存储原理 使用定点数存储小数,我们首先得先确定: 假设:使用单字节(8个二进制位)...
在 C++11 标准中引入的 default 关键字,主要用于在类的声明中显式指定编译器生成默认的特殊成员函数实现。这些特殊成员函数包括: 1. 默认构造 https://en.cppreference.com/w/cp...
函数对象有时也叫仿函数,其本质是一个类对象,由于重载函数调用符号,其可以像普通函一样使用。 1. 函数调用符号重载语法 2. 函数对象相对于普通函数的优点 C++中使用函数对象作为函数调用,而不是再使用函数指针。 函数对...
常对象指的是使用 const 关键字修饰的类对象,常函数指的是由 const 关键字修饰的函数。这里需要注意:只有成员函数才可以被 const 关键字修饰,而全局函数无法被 const 关键字修饰。 1. 常函数 在成员...
1. 类对象的默认赋值行为 2. 类对象中深赋值和浅赋值问题 3. 类对象的移动赋值行为 当对象进行赋值的时,并不是所有的对象都需要完整的赋值过程(重新申请内存、数据拷贝)。假设,赋值对象是:右值对象(匿名对象、将亡值对...
1. 委托构造函数的使用场景 缺点:每个构造函数都有重复的成员变量的初始化语句 初始化交给一个普通成员函数,该成员函数无法使用简洁的初始化列表语句,需要额外给类增加一个初始化函数。 2. 委托构造函数语法 C++11 增...
在 C++ 11之后,值的类别有三种:左值(lvalue)、纯右值(prvalue)、将亡值(xvalue)。 1. 左值 在C++中,左值(lvalue)是指表达式结束后仍然存在的持久性对象或函数。左值可以是变量、数组...
移动语义是 C++11 标准引入的一个特性,旨在通过优化资源管理改善 C++ 的效率。移动语义主要涉及通过右值引用(rvalue references)来避免不必要的深拷贝,从而减少资源的分配和释放。 1. 拷贝场景 在...
1. 异常对象的保存 异常对象保存,指的是当异常发生时,我们将其捕获,但是并不马上处理,而是将其存储起来。这样的话,我们可以在程序最后、或者其他的并行任务的进程、线程里处理。 接下来,我们需要了解如何保存异常对象、以及如...
1. 多继承的名字冲突问题 多继承:一个类可以同时继承多个类,但是多继承很容易产生同名冲突(函数、变量)。 对于上述情况,如果由于多继承出现的名字冲突问题,需要通过指定类作用域的方式加以区分。 2. 多继承的优点 多继承...
C++ 中的 using 用法有很多种,我们下面剖析下常见几种场景: using 关键字给类型增加别名 using 用于继承中的同名函数 using 关键字用于构造函数 1. using 关键字给类型增加别名 对于普通类...