摘要:
条款24:区分万能引用与右值引用 核心结论 判断条件 结果 是 T&&,并且发生类型推导 万能引用 是 T&&,但没有类型推导 右值引用 const T&& / vector<T>&& 等非标准形式 右值引用 auto&&,发生类型推导 万能引用 万能引用(Universal Reference) 阅读全文
posted @ 2025-07-20 19:21
_Sylvan
阅读(47)
评论(0)
推荐(0)
摘要:
条款23:理解 std::move 和 std::forward 简介 移动语义 允许编译器用“廉价”的移动操作代替“昂贵”的拷贝操作。通过移动构造函数和移动赋值操作符,程序员可以控制对象如何被“移动”而不是复制。它使得一些类型(如 std::unique_ptr、std::future、std:: 阅读全文
posted @ 2025-07-20 19:20
_Sylvan
阅读(252)
评论(0)
推荐(0)
摘要:
条款22:Pimpl 需在实现文件定义特殊函数 当在类中使用 Pimpl(Pointer to Implementation)惯用法,并用 std::unique_ptr 管理实现类指针时,类的特殊成员函数(如:析构函数、移动构造函数、拷贝构造函数等)不能只在头文件中默认生成,而必须在 .cpp 实 阅读全文
posted @ 2025-07-20 19:20
_Sylvan
阅读(22)
评论(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
阅读(122)
评论(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
阅读(40)
评论(0)
推荐(0)
摘要:
条款19:使用 std::shared_ptr 管理共享资源 std::shared_ptr 提供共享所有权的资源管理方式,其背后使用引用计数。 在不引入垃圾回收机制的同时,实现了自动销毁和析构时机可预期的资源管理。 是 C++ 中模拟“垃圾回收”的一种方式,但销毁是确定性的。 内部机制与实现细节 阅读全文
posted @ 2025-07-20 19:19
_Sylvan
阅读(52)
评论(0)
推荐(0)
摘要:
条款18:使用 std::unique_ptr 管理独占资源 智能指针为何重要? 原始指针的缺点: 无法区分单个对象还是数组(影响 delete 方式) 不清楚是否应销毁资源(是否拥有所有权) 不知道如何销毁资源(delete、delete[] 或其他机制) 容易出现资源泄露或重复释放 难以处理异常 阅读全文
posted @ 2025-07-20 19:19
_Sylvan
阅读(143)
评论(0)
推荐(0)
摘要:
条款17:理解特殊成员函数的生成 什么是特殊成员函数? 特殊成员函数是指编译器自动生成的成员函数,主要包括: 默认构造函数(Default Constructor) 析构函数(Destructor) 拷贝构造函数(Copy Constructor) 拷贝赋值运算符(Copy Assignment O 阅读全文
posted @ 2025-07-20 19:19
_Sylvan
阅读(37)
评论(0)
推荐(0)
摘要:
条款16:让 const 成员函数线程安全 背景与问题 const 成员函数在概念上不修改对象状态,是“只读操作”。 但实际中,为了性能或便利,const 函数可能做缓存(lazy evaluation),修改某些 mutable 成员(比如缓存值和状态标志)。 如果多个线程同时调用同一个对象的 c 阅读全文
posted @ 2025-07-20 19:19
_Sylvan
阅读(61)
评论(0)
推荐(0)
摘要:
条款15:尽可能使用 constexpr constexpr 表示一个值不仅是常量(const),而且必须在编译期已知。 constexpr 对象 vs 函数 用法 描述 constexpr 变量 必须在编译期能被计算,且隐含 const。 constexpr 函数 如果传入编译期常量,结果也会是编 阅读全文
posted @ 2025-07-20 19:18
_Sylvan
阅读(33)
评论(0)
推荐(0)
摘要:
条款14:如果函数不抛出异常请使用 noexcept 为什么使用 noexcept 更安全的接口设计: noexcept 是函数接口的一部分,明确告知调用者「不会抛异常」。 启用更多优化: 编译器对 noexcept 函数可以省略异常处理机制,生成更高效代码。 支持 STL 的强异常安全保证: 如 阅读全文
posted @ 2025-07-20 19:18
_Sylvan
阅读(32)
评论(0)
推荐(0)
摘要:
条款13:优先考虑 const_iterator 而非 iterator 只要不需要修改元素,就应优先使用 const_iterator。 const_iterator 只保证不能通过它修改元素本身 不限制操作容器结构(如插入、删除) 理由同“能加 const 就加”的通用准则:可读性更高、语义更明 阅读全文
posted @ 2025-07-20 19:18
_Sylvan
阅读(27)
评论(0)
推荐(0)
摘要:
条款12:使用 override 声明重写函数 在 C++ 面向对象中,派生类可以重写(override)基类的虚函数,实现多态。 重写与重载不同,重写是基类和派生类中同名、参数、常量性、返回类型兼容的虚函数。 重写时,基类函数必须是 virtual,派生类函数名、参数、const、引用限定符等必须 阅读全文
posted @ 2025-07-20 19:18
_Sylvan
阅读(125)
评论(0)
推荐(0)
摘要:
条款11:优先考虑使用 deleted 函数,而非使用未定义的私有声明 背景与问题 在 C++98 中,想禁止某些特殊成员函数(如拷贝构造函数、拷贝赋值运算符)被调用,常用做法是将它们声明为私有(private)且不定义。 这样做虽然防止了外部调用,但如果在成员函数或友元中调用这些函数,只能在链接阶 阅读全文
posted @ 2025-07-20 19:17
_Sylvan
阅读(27)
评论(0)
推荐(0)
摘要:
条款10:优先考虑限域 enum 而非未限域 enum 作用域区别 未限域枚举(unscoped enum,C++98风格) 枚举值(enumerator)直接泄漏到枚举所在的作用域中,可能导致命名冲突。 enum Color { black, white, red }; // black, whi 阅读全文
posted @ 2025-07-20 19:17
_Sylvan
阅读(18)
评论(0)
推荐(0)

浙公网安备 33010602011771号