Skip to content

败犬日报 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]]

https://clang.llvm.org/docs/AttributeReference.html