智能指针之unique_ptr

std::unique_ptr独占所指向的对象。对其持有的堆内存具有唯一拥有权。 当我们独占资源的所有权的时候,可以使用std::unique_ptr对资源进行管理。当离开unique_ptr对象的作用域时,会自动释放资源。 int main() { { std::unique_ptr...

阅读更多

智能指针之shared_ptr

std::shared_ptr能够共享对同一资源的所有权。它允许多个指针指向同一个资源,并通过引用计数来管理资源的生命周期。 当最后一个std::shared_ptr实例被销毁或重置时,它所指向的资源才会被释放。 { std::shared_ptr<int> sptr = std::mak...

阅读更多

移动语义和完美转发

要理解移动语义和完美转发,首先必须理解: 右值引用 万能引用和引用折叠 移动语义 移动语义和拷贝语义相对的,移动语义可以将资源从一个对象转移到另一个对象,这样能够减少不必要的临时对象的创建、拷贝以及销毁。 完美转发的实现主要依赖于两个关键要素:右值引用和移动构造函数/移动赋值操作符。 在转移资源...

阅读更多

万能引用和引用折叠

引用折叠 引用折叠用于处理当类型别名或模板实例化导致“引用的引用”出现时的情况。 一个模板函数,根据定义的形参和传入的实参的类型,我们可以有下面四中组合: 函数定义的形参类型是左值引用,传入的实参是左值引用(& - &) 函数定义的形参类型是左值引用,传入的实参是右值引用(&...

阅读更多

左值引用和右值引用

左值引用 左值引用就是左值的别名,不是变量的别名,而是地址的别名,是与地址建立的一种映射关系。我们可以通过不同的别名访问同一块地址空间。 左值引用并非对象,只是为一个已经存在的对象所起的另外一个名字。 左值引用必须初始化,因为无法令左值引用重新绑定到另外一个对象。一旦初始化完成,左值引用将和他的初始值对象一直...

阅读更多

左值和右值

左值与右值这两个概念是从 C 中传承而来的,左值指既能够出现在等号左边,也能出现在等号右边的变量;右值则是只能出现在等号右边的变量。 左值和右值在 C/C++ 中是表达式(expression)的一种属性,被称为值类别(value categories)。 表达式是指由运算符(operator)和运算对象(op...

阅读更多

RTTI-运行时类型信息

RTTI,即Run-Time Type Information(运行时类型信息),是 C++ 提供的一种机制,用于在程序运行时获取和使用多态对象的实际类型信息。 RTTI的作用: 多态性支持: 当使用基类指针或引用指向派生类对象时,能够识别出对象的实际类型。 类型安全转换: 允许在运行时进行(向下)类...

阅读更多

C++并发编程 7:原子操作

原子操作提供了在多线程环境中无需显式同步就能安全访问共享数据的机制。原子操作是不可分割的操作,要么完全执行,要么完全不执行,不会被其他线程中断。 原子性保证了操作的完整性: 不可中断性:操作在执行过程中不会被其他线程中断 可见性:一个线程对原子变量的修改对其他线程立即可见 有序性:通过内存序约束确...

阅读更多