R. *_*des 60 c++ smart-pointers type-erasure
该std::unique_ptr模板有两个参数:指针对象的类型和删除器的类型.第二个参数有一个默认值,所以你通常只写一些像std::unique_ptr<int>.
该std::shared_ptr模板有虽然只有一个参数:指针对象的类型.但是你也可以使用自定义删除器,即使删除类型不在类模板中.通常的实现使用类型擦除技术来执行此操作.
有没有理由不使用相同的想法std::unique_ptr?
Pup*_*ppy 38
部分原因是shared_ptr无论如何都需要一个明确的控制块用于引用计数并且保留一个删除器并不是最重要的.unique_ptr但是不需要任何额外的开销,并且添加它将是不受欢迎的 - 它应该是零开销类.unique_ptr应该是静态的.
如果你想要这样的行为,你总是可以在顶部添加自己的类型擦除 - 例如,你可以拥有unique_ptr<T, std::function<void(T*)>>我过去做过的事情.
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           3755 次  |  
        
|   最近记录:  |