败犬日报 2025-04-15
1. malloc 得到的内存(可能是一些 C 库的返回值)可以放入 std::unique_ptr<char[]>
里吗
不能。malloc 的内存要用 free 释放不能用 delete,所以要自定义 unique_ptr 的 Deleter。
2. shared_ptr 传给函数,参数定义为裸指针是否合理
裸指针的语义是借用(即不获得所有权,不析构),只要函数保证局部使用,不长期持有,这样无论如何都不会寄。这样也不会限制 shared_ptr
类型,其他指针也能传。
第二种情况是需要长期持有,这时候就需要传参 shared_ptr / weak_ptr 了。
上面的实践需要保证团队里的人都清楚各种指针的语义,但是架不住同事不会啊,所以 ban 了裸指针只传 shared_ptr
或者 shared_ptr&
也是有道理的。
3. 生命周期属性
[[clang::lifetimebound]]
和 [[clang::lifetime_capture_by]]