- 博客(21)
- 收藏
- 关注
原创 C++ 条件变量虚假唤醒问题的解决
在 C++ 中, 的 和 方法除了可以传入一个锁(),还可以传入一个谓词函数(函数或可调用对象)。这个谓词的作用是让条件变量在特定的条件满足时才退出等待。谓词是一个返回布尔值的函数或可调用对象,它用于判断某个条件是否满足。如果条件不满足, 会继续阻塞当前线程;如果条件满足,线程会立即退出等待状态。如果不使用谓词,必须手动在循环中检查条件:在这种情况下, 只是等待被唤醒,但必须手动在循环中检查 是否为 。否则,线程可能会因为虚假唤醒提前退出。通过传入谓词,可以让 方法自动检查条件,避免手动循环:解
2025-05-26 11:02:46
554
原创 opencv 对roi操作需要注意可能丢失roi问题
在 OpenCV 里,Mata + b调用的是全局函数(对不同类型有多个重载)这个函数内部创建一个新的Mat tmp,把src1和src2按元素相加的结果写入tmp,然后返回它。dst = tmp调用的是Matdsttmpdsta+b。
2025-05-17 17:39:41
693
原创 引用使用的一个注意事项------可能使你的引用失效
在 C++ 中,函数可以返回一个T&),允许调用者直接操作被引用的对象。但T&——调用处接收返回值时,若不使用引用类型,也会触发(拷贝),与引用语义无关。下面我们从示例和原理两方面来深入剖析。
2025-05-10 13:45:11
347
原创 C++17解决了One Definition Rule问题
声明(declaration):告诉编译器“有这么个名字、这么种类型”,不分配存储,也不产生代码。// 仅声明,全局变量 g_value// 仅声明,函数 foo定义(definition):为变量分配存储,或给函数提供函数体;同一个程序中,对非内联实体,只能出现一次定义。// 定义,全局变量分配空间void foo(int x) { /*…*/ } // 定义,函数体假设有这样一个头文件common.h// ⚠ 直接定义!void foo() { /*…*/ } // ⚠ 直接定义!
2025-05-09 14:14:49
1004
原创 VA_ARGS用法
在 C/C++(C99 及以后标准)中,可以用“可变参数宏”(variadic macro)来定义接收不定数量参数的宏,使用的关键字就是...和。下面把它们的语法、常见用法、标准差异和常见陷阱做个归纳。
2025-05-04 15:34:36
254
原创 条件变量 互斥锁 信号量 区别
在并发编程中,互斥量(Mutex)、条件变量(Condition Variable)、信号量(Semaphore)和锁(Lock)都是用于协调线程(或进程)对共享资源访问的同步原语。
2025-04-24 17:13:25
433
原创 智能指针与移动语义一些最佳实践
在现代 C++ 中,和是两种常用的智能指针,用于管理动态分配对象的生命周期。配合移动语义,这两者能帮助我们写出既高效又安全的代码。
2025-04-21 11:06:39
257
原创 智能指针删除器的两种用法
可能的疑问:functional没有具体的函数实现只是一个类型,那么仿函数作何理解,他难道不是一个类型吗,为什么不需要初始化?
2025-04-18 18:49:01
286
原创 C++中管理C资源的方法
C++ 的智能指针(如 std::unique_ptr 和 std::shared_ptr)可以通过自定义删除器来管理 C 语言 资源。这样,您可以利用智能指针的自动资源管理机制,同时自定义资源的释放方式。示例:使用 std::unique_ptr 管理 FILE* 资源// 可以添加更多的清理逻辑// 定义一个 unique_ptr,管理 FILE* 资源,并指定删除器if (!
2024-11-30 11:12:00
387
原创 extern关键字在C与C++中的一些用法与注意
关键点:头文件中的变量声明必须用extern所以:头文件中的变量声明必须使用extern这与函数声明不同()实际定义只能在一个.cpp文件中函数声明可以不用extern,因为函数是唯一的,原因是:函数声明默认就是extern的函数声明不会分配存储空间编译器知道这只是一个声明变量声明默认会导致定义会分配存储空间必须显式使用extern表明这只是声明。
2024-11-08 08:57:14
840
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人