类定义了对象的数据和行为,而构造、析构与拷贝语义决定了对象如何出生、如何复制、如何赋值以及如何结束生命周期。
如果一个类只包含int等值类型,编译器生成的成员函数往往已经够用;一旦类直接管理堆内存、文件、锁或网络连接,错误的复制与释放就可能导致内存泄漏、重复释放和悬空指针。
本文系统讲解构造函数、析构函数、拷贝构造、赋值运算符、深浅拷贝、运算符重载、cons ...
类与对象是C++面向对象编程的基础。类负责描述一类对象共同具有的数据和行为,对象则是类在程序中的具体实例。
学习这一部分时,不能只停留在class语法,还需要理解三个更深层的问题:类如何管理数据、一个对象在内存中实际保存什么,以及非静态成员函数如何确定自己正在操作哪个对象。
本文系统讲解面向对象思想、类的定义、访问限定符、封装、类作用域、实例化、对象内存模型 ...
C++在C语言的基础上增加了更强的类型系统、面向对象、泛型编程以及现代标准库。对于刚从C语言过渡到C++的学习者来说,最先需要建立的不是“多记几个新语法”,而是理解这些语法解决了什么问题。
本文系统梳理C++入门阶段的十个核心知识点:关键字、命名空间、输入输出、缺省参数、函数重载、引用、内联函数、auto、范围for和nullptr,并补充常见误区、编译原理 ...
STL 容器不仅要组织元素,还要获取原始存储、在存储上构造对象、销毁对象并归还存储。分配器(allocator)把这些底层步骤从容器的数据结构逻辑中分离出来,使容器能够适配不同内存来源和资源策略。
经典教材常以 SGI STL 的一级、二级空间配置器为例,讲解小对象内存池、尺寸分类自由链表和内存不足处理。这套设计非常有学习价值,但它是特定历史实现,不是 C+ ...
STL 是 Standard Template Library 的缩写,即标准模板库。它以泛型编程为核心,把数据结构、遍历方式和处理算法拆分成可以自由组合的组件,使同一套算法能够处理不同容器。
学习 STL 不能只停留在记忆接口。真正重要的是理解容器特性、迭代器能力、算法前置条件、复杂度、失效规则以及六大组件之间如何协作。本文以整体知识框架为主线,对常用容器 ...
类型转换决定了一个值如何以另一种类型参与计算、传参、返回或对象访问。看似简单的 double 转 int、基类指针转派生类指针、去除 const,背后分别涉及精度丢失、对象真实类型、访问权限、内存模型和未定义行为。
C++ 保留了 C 风格转换,同时提供 static_cast、dynamic_cast、const_cast 和 reinterpret_ca ...
所谓“特殊类”,通常是指对对象创建位置、复制能力、继承关系或实例数量施加约束的类。例如:只能通过工厂创建、禁止复制、禁止继承,或者整个进程只允许存在一个实例。
这些设计题看起来是在考构造函数、operator new、= delete、final 和静态成员,实质上考查的是对象生命周期、访问控制、所有权、并发安全与接口约束。本文按照常见面试题逐一分析,并说明 ...
C++ 允许程序员直接管理内存,这带来了精确控制能力,也带来了内存泄漏、重复释放、悬空指针和异常安全等问题。智能指针的核心价值,不是把裸指针换一个名字,而是用对象生命周期表达资源所有权,并通过 RAII 自动完成释放。
本文从内存泄漏与 RAII 出发,系统讲解 std::unique_ptr、std::shared_ptr、std::weak_ptr 的使 ...
C++ 异常是一套用于报告和处理运行期错误的机制。它把“发现错误”与“处理错误”分离:底层函数负责发现问题并抛出异常,上层调用者根据异常类型决定如何恢复、记录或终止操作。
异常本身并不复杂,真正需要掌握的是异常传播、栈展开、资源释放、异常安全保证以及工程中的使用边界。本文从传统错误处理方式讲起,系统梳理 throw、try、catch、重新抛出、自定义异常、 ...
前言C++11 是现代 C++ 的重要起点。它并不是简单增加几个语法糖,而是从语言表达能力、资源管理、泛型编程和并发支持等方面系统地改造了 C++。
与 C++98/03 相比,C++11 的重要变化包括:
统一的列表初始化;
auto 与 decltype 类型推导;
范围 for 循环;
nullptr、constexpr 和 static_ ...
