败犬日报 2025-05-15
1. runtime error: load of value 190, which is not a valid value for type 'bool'
是 bool 变量未初始化。
众所周知未初始化变量是未定义行为 (UB),
clang 有个专门的 sanitizer 来检查 https://clang.llvm.org/docs/MemorySanitizer.html。
2. 怎么控制析构顺序
有析构顺序的要求,那一定是代码结构不合理,这是一开始写的人埋的雷。
最简单的方法就是比如 A 需要在 B 之前,你就弄个 A 的共享指针给 B 拿着。需要保证没有环形依赖。
3. 为什么没有 unique_ptr<void>
往期提到到 shared_ptr<void>
。
我们知道 shared_ptr
会保存析构函数,而 unique_ptr
不会保存(如果没指定 Deleter),编译器不知道怎么析构它。
所以指定 Deleter 即可。