C++基础
文章平均质量分 73
C++基础介绍
申徒嘉
主研C++音频开发
擅长C++、Android(Java)、iOS(Objective-C)
展开
-
C++ std::unique_ptr 详解
delete ptr;// 输出 20• std::unique_ptr 提供了独占所有权,确保内存安全释放。• 不能复制,只能通过 std::move 转移所有权。• 支持自定义删除器。• 使用 std::make_unique 提供更安全的创建方式。这些特性使得 std::unique_ptr 成为管理动态内存的强大工具,特别是在需要明确所有权语义的场景中。原创 2024-08-09 13:14:07 · 314 阅读 · 0 评论 -
C++ std::shared_ptr 与 std::weak_ptr 详解
• 引用计数:std::shared_ptr 内部维护一个引用计数器,记录有多少个 std::shared_ptr 实例共享同一个对象。std::weak_ptr 是一种不增加引用计数的智能指针,它可以安全地引用一个由 std::shared_ptr 管理的对象。std::weak_ptr 不能直接访问对象,需要通过 lock() 方法将其转换为 std::shared_ptr。在这个修改后的代码中,B 持有 A 的 std::weak_ptr,这样就不会增加 A 的引用计数,从而避免了循环引用。原创 2024-08-08 16:08:25 · 759 阅读 · 0 评论 -
c++异常处理机制详解
/ 自定义异常类public:private:try {return 0;详细解释try块:mightGoWrong函数被放在try块中,因为它可能抛出异常。throw语句:在mightGoWrong函数中,根据条件抛出不同类型的异常。catch块:有多个catch块来捕获不同类型的异常。每个catch块处理特定类型的异常,并输出相应的错误信息。在自定义异常类中添加更多的上下文信息可以帮助你在捕获异常时提供更详细的错误信息。原创 2024-08-08 09:19:33 · 667 阅读 · 0 评论 -
C++ static_cast用法简介
static_cast 是 C++ 中的一种类型转换运算符,用于在编译时执行类型转换。它提供了一种安全的方式来进行显式类型转换,避免了传统 C 风格类型转换的潜在问题。以下是 static_cast 的详细解释。原创 2024-08-06 16:09:57 · 367 阅读 · 0 评论 -
Leetcode Top100题目和答案(1-10)
问题描述:你是一个专业的小偷,计划偷窃沿街的房屋。问题描述:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。问题描述:给定一个只包括 (, ), {, }, [ 和 ] 的字符串,判断字符串是否有效。问题描述:给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。问题描述:给定一个排序数组,删除重复项,使每个元素只出现一次,并返回新的长度。问题描述:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。问题描述:给定一个字符串,找到最长的回文子串。原创 2024-08-05 09:52:52 · 1362 阅读 · 0 评论 -
数据结构之B树与B+树
B树的每个节点可以包含多个键和子节点,从而减少了树的高度,提高了操作效率。度数:B+树的度数(或称为最小度数)是一个重要参数,表示每个节点至少包含的子节点数。叶子节点:所有的键和值都存储在叶子节点中,叶子节点通过指针相互连接,形成一个链表。节点:B+树的每个节点可以包含多个键和子节点。键的数量:每个内部节点包含的键的数量在t-1到2t-1之间。子节点的数量:每个内部节点包含的子节点的数量在t到2t之间。子节点的数量:每个内部节点的子节点数量比其键的数量多1。键的排序:每个节点的键按升序排列。原创 2024-07-30 08:52:11 · 1566 阅读 · 0 评论 -
C/C++操作系统与预定义编译器宏
操作系统宏备注Android__linux__MacOSmacintoshMacintosh__APPLE__&&__MACH__Windows_WIN32_WIN64__WIN32__NUIX__unix____unixSolarissun__sunOpenBSDFreeBSD。原创 2024-07-26 15:22:57 · 321 阅读 · 0 评论 -
为什么C++模板只能在头文件中实现
因此,编译器需要访问方法的实现,用模板参数(本例中是int)来实例化他们。如果这些实现没有在头文件中,它们将不可访问,导致编译器无法实例化模板。执行文件又包含在项目中,再次对成员函数进行了定义,所以会有“函数模板已经定义”的错误信息。以上代码出错的原因在于,当实例化一个模板时,编译器会根据给定的模板参数创建一个新类,对于上述代码,我们在。通用的解决方法是在头文件中写模板的声明,然后实现类在实现文件中(执行文件从项目中移除,注意是“移除”而不是“删除”。),同时在头文件尾部将实现文件include进来。原创 2024-07-24 15:03:34 · 435 阅读 · 0 评论 -
大端模式(Big-Endian)和小端模式(Little-Endian)
大端模式(Big-Endian)和小端模式(Little-Endian)是计算机科学中用于描述多字节数据的字节序(即字节的排列顺序)的术语。这两种模式定义了数据在内存中如何存储和读取,特别是在涉及多字节数据类型(Int ,Float)时。原创 2024-07-23 14:47:40 · 908 阅读 · 0 评论 -
Windows使用互斥量实现控制台应用程序限制程序只能运行一个实例
如果是这种情况(ERROR_ALREADY_EXISTS),则表示程序的另一个实例已经在运行,当前实例应该退出。请注意,这种方法在多用户环境下可能需要调整,因为 “Global\” 前缀允许在所有用户会话中检测互斥量。此外,确保你的程序在任何退出点都释放了互斥量,以避免资源泄露。要确保你的程序只能运行一个实例,你可以使用操作系统提供的机制来检查是否已经有一个实例在运行。这个函数是在 头文件中定义的,通常用于控制台应用程序中,以便在不显示按键字符的情况下从键盘获取一个字符。原创 2024-07-15 11:40:35 · 223 阅读 · 0 评论 -
C++函数模板与类模板
C++模板允许程序员在通用编程中创建可重用的代码,这种编程技术基于模板的编译时多态性。程序员通过模板可处理多种类型儿无需为每种类型编写不同的代码。C++模板分为函数模板和类模板。template class 类名{//成员列表或者template class 类名{//成员列表。原创 2023-12-07 14:12:04 · 93 阅读 · 0 评论