vector是C++ STL中动态数组容器,需包含头文件<vector>并使用std命名空间;可定义空容器、指定大小初始化、赋初值或拷贝构造;常用操作包括push_back、pop_back、insert、erase、clear添加删除元素,通过下标、at、front、back访问元素,size、empty、capacity管理容量,r…
单例模式确保类唯一实例并提供全局访问点,常见实现包括懒汉模式(首次调用创建,需注意线程安全)、线程安全的局部静态变量版本(C++11推荐)、饿汉模式(程序启动即初始化,线程安全但可能浪费资源)以及结合析构结构体或智能指针的自动资源管理方式,选择依据为是否延迟加载、多线程环境和资源释放需求。 单例设计模式确保一个类只有一个实例,并提供一个全局访问点。…
构造函数用于初始化对象,在创建时自动调用,可重载;析构函数用于释放资源,在对象销毁时自动调用,不可重载。两者均由编译器自动调用,无需手动干预。 在C++中,构造函数和析构函数是类的重要组成部分,它们用于管理对象的生命周期。理解这两个函数的作用和调用机制,对掌握面向对象编程至关重要。 什么是构造函数 构造函数是一种特殊的成员函数,它的名字与类名相同,…
使用前置声明和合理组织代码可解决头文件循环依赖。当类A与类B相互引用指针时,可用class B;等前置声明替代#include,打破包含循环;将实现移至cpp文件并在其中包含所需头文件,减少头文件耦合;通过接口抽象、Pimpl惯用法等设计手段进一步控制依赖,避免重复包含导致的编译错误。 在C++开发中,头文件之间的循环依赖是一个常见但容易引发编译错…
std::function 可统一包装函数指针、lambda、成员函数和C回调,通过自动转换、bind或适配器实现灵活回调机制,提升接口抽象性与可维护性。 在C++中,将普通函数、函数指针或仿函数适配为 std::function 是常见需求,尤其是在需要统一回调接口的场景下。std::function 能包装任何可调用对象,包括函数指针、lamb…
模板类通过template<typename T>定义,实现类型通用的类,如MyArray可存储任意类型数据,支持int、double、string等实例化,提升代码复用性与灵活性。 在C++中,模板类是一种通用类,允许你定义不依赖具体类型的类,从而让类可以适用于多种数据类型。使用模板类能提高代码的复用性和灵活性。 模板类的基本定义语法…
std::function能统一处理普通函数、lambda、bind表达式、函数对象和成员函数指针,而函数指针仅支持特定签名的自由函数。2. 函数指针调用开销小、内存占用低,std::function因类型擦除可能引入堆分配和间接调用开销。3. 高性能场景优先用函数指针,现代C++中需灵活性和统一接口时推荐std::function。 在C++中,…
重载加号运算符可通过成员函数或友元函数实现,成员函数适用于常规对象相加,如Complex c3 = c1 + c2;友元函数支持非类类型左操作数,如5 + obj,需声明为friend并定义外部函数,两者均应返回新对象、使用const引用参数,保持语义一致且支持链式调用。 在C++中,重载加号(+)运算符可以让自定义类的对象支持类似基本类型那样的相…
std::condition_variable用于线程同步,需与std::mutex配合使用,通过wait阻塞线程、notify唤醒线程,适用于生产者-消费者等场景,使用时应结合谓词防止虚假唤醒。 在C++多线程编程中,std::condition_variable 是用于线程间同步的重要工具之一。它通常与 std::mutex 配合使用,用来阻塞…
优先使用 std::string_view 以避免拷贝并统一处理多种字符串类型,适用于只读场景;当需调用 c_str() 或兼容旧标准时使用 const std::string&。 在C++开发中,处理字符串时经常面临选择:用 std::string_view 还是 const std::string&?这个问题看似简单,实则涉及性…