摘要:
条款 25:对右值引用使用 std::move,对万能引用使用 std::forward 核心要点 引用类型 用法 原因 右值引用 T&& 使用 std::move(x) 因为它总绑定右值,无条件移动 万能引用 T&& 使用 std::forward<T>(x) 可能绑定左值或右值,需有条件地转发 阅读全文
posted @ 2025-07-20 19:21
_Sylvan
阅读(31)
评论(0)
推荐(0)
摘要:
条款20:当 std::shared_ptr 可能悬空时使用 std::weak_ptr 核心思想 std::weak_ptr 是一个非拥有型智能指针,它指向 std::shared_ptr 所管理的对象,但不增加引用计数。 std::weak_ptr 可以在对象被销毁时检测出自己是否悬空。 设计动 阅读全文
posted @ 2025-07-20 19:20
_Sylvan
阅读(17)
评论(0)
推荐(0)
摘要:
条款21:优先使用 std::make_unique 和 std::make_shared 而非直接使用 new 背景与引入 std::make_shared 从 C++11 标准开始提供。 std::make_unique 从 C++14 标准开始提供,C++11 中可自定义实现。 这两个“mak 阅读全文
posted @ 2025-07-20 19:20
_Sylvan
阅读(47)
评论(0)
推荐(0)
摘要:
条款22:Pimpl 需在实现文件定义特殊函数 当在类中使用 Pimpl(Pointer to Implementation)惯用法,并用 std::unique_ptr 管理实现类指针时,类的特殊成员函数(如:析构函数、移动构造函数、拷贝构造函数等)不能只在头文件中默认生成,而必须在 .cpp 实 阅读全文
posted @ 2025-07-20 19:20
_Sylvan
阅读(17)
评论(0)
推荐(0)
摘要:
条款23:理解 std::move 和 std::forward 简介 移动语义 允许编译器用“廉价”的移动操作代替“昂贵”的拷贝操作。通过移动构造函数和移动赋值操作符,程序员可以控制对象如何被“移动”而不是复制。它使得一些类型(如 std::unique_ptr、std::future、std:: 阅读全文
posted @ 2025-07-20 19:20
_Sylvan
阅读(157)
评论(0)
推荐(0)
摘要:
条款16:让 const 成员函数线程安全 背景与问题 const 成员函数在概念上不修改对象状态,是“只读操作”。 但实际中,为了性能或便利,const 函数可能做缓存(lazy evaluation),修改某些 mutable 成员(比如缓存值和状态标志)。 如果多个线程同时调用同一个对象的 c 阅读全文
posted @ 2025-07-20 19:19
_Sylvan
阅读(33)
评论(0)
推荐(0)
摘要:
条款17:理解特殊成员函数的生成 什么是特殊成员函数? 特殊成员函数是指编译器自动生成的成员函数,主要包括: 默认构造函数(Default Constructor) 析构函数(Destructor) 拷贝构造函数(Copy Constructor) 拷贝赋值运算符(Copy Assignment O 阅读全文
posted @ 2025-07-20 19:19
_Sylvan
阅读(18)
评论(0)
推荐(0)
摘要:
条款18:使用 std::unique_ptr 管理独占资源 智能指针为何重要? 原始指针的缺点: 无法区分单个对象还是数组(影响 delete 方式) 不清楚是否应销毁资源(是否拥有所有权) 不知道如何销毁资源(delete、delete[] 或其他机制) 容易出现资源泄露或重复释放 难以处理异常 阅读全文
posted @ 2025-07-20 19:19
_Sylvan
阅读(26)
评论(0)
推荐(0)
摘要:
条款19:使用 std::shared_ptr 管理共享资源 std::shared_ptr 提供共享所有权的资源管理方式,其背后使用引用计数。 在不引入垃圾回收机制的同时,实现了自动销毁和析构时机可预期的资源管理。 是 C++ 中模拟“垃圾回收”的一种方式,但销毁是确定性的。 内部机制与实现细节 阅读全文
posted @ 2025-07-20 19:19
_Sylvan
阅读(24)
评论(0)
推荐(0)
摘要:
条款12:使用 override 声明重写函数 在 C++ 面向对象中,派生类可以重写(override)基类的虚函数,实现多态。 重写与重载不同,重写是基类和派生类中同名、参数、常量性、返回类型兼容的虚函数。 重写时,基类函数必须是 virtual,派生类函数名、参数、const、引用限定符等必须 阅读全文
posted @ 2025-07-20 19:18
_Sylvan
阅读(69)
评论(0)
推荐(0)
摘要:
条款13:优先考虑 const_iterator 而非 iterator 只要不需要修改元素,就应优先使用 const_iterator。 const_iterator 只保证不能通过它修改元素本身 不限制操作容器结构(如插入、删除) 理由同“能加 const 就加”的通用准则:可读性更高、语义更明 阅读全文
posted @ 2025-07-20 19:18
_Sylvan
阅读(18)
评论(0)
推荐(0)
摘要:
条款14:如果函数不抛出异常请使用 noexcept 为什么使用 noexcept 更安全的接口设计: noexcept 是函数接口的一部分,明确告知调用者「不会抛异常」。 启用更多优化: 编译器对 noexcept 函数可以省略异常处理机制,生成更高效代码。 支持 STL 的强异常安全保证: 如 阅读全文
posted @ 2025-07-20 19:18
_Sylvan
阅读(20)
评论(0)
推荐(0)
摘要:
条款15:尽可能使用 constexpr constexpr 表示一个值不仅是常量(const),而且必须在编译期已知。 constexpr 对象 vs 函数 用法 描述 constexpr 变量 必须在编译期能被计算,且隐含 const。 constexpr 函数 如果传入编译期常量,结果也会是编 阅读全文
posted @ 2025-07-20 19:18
_Sylvan
阅读(13)
评论(0)
推荐(0)
摘要:
条款 8:优先考虑 nullptr 而非 0 和 NULL 原因一:0 和 NULL 本质是整型,不是指针 表达式 实际类型 0 int NULL 实现相关,通常是 int 或 long,但不是指针类型 nullptr std::nullptr_t,可以隐式转换为任意类型的指针 原因二:函数重载中容 阅读全文
posted @ 2025-07-20 19:17
_Sylvan
阅读(14)
评论(0)
推荐(0)
摘要:
条款9:优先考虑别名声明 (using) 而非 typedef 基本用法对比 类型 语法 示例 typedef 旧写法(C++98) typedef std::vector<int> VecInt; using(别名声明) 新写法(C++11) using VecInt = std::vector< 阅读全文
posted @ 2025-07-20 19:17
_Sylvan
阅读(31)
评论(0)
推荐(0)

浙公网安备 33010602011771号