sil*_*der 3 c++ shared-ptr unique-ptr c++11 c++14
我们假设我们有这样的事情:
struct Complex{
Complex(Part1 p1, Part2 p2, Part3 p3)
}
Part1 p1;
Part2 p2;
Part3 p3;
Run Code Online (Sandbox Code Playgroud)
但是,传递副本无效,因此我们需要转移到指针.问题是使用什么类型 - unique_ptr或shared_ptr
乍一看,既然Complex是真正的主人p1, p2, p3,那似乎unique_ptr更好; 但是,由于无法复制,我们需要使用std::move.
所以我的问题是-什么是这种情况下,更好的办法,创造unique_ptr出的Part,然后用move在Complex类的构造函数,或者创建shared_ptr自beggining和使用shared_ptr呢?
Rei*_*ica 11
最好的解决方案是使Part类型移动便宜,并将它们移入.但是,如果这不是一个选项,您将不得不求助于动态管理它们.
如你所说,Complex拥有部分,所以它应该接受它们std::uniqe_ptr<Part>并将这些指针移动到自身.移动a std::unique_ptr很便宜:它可能只会引发两个指针分配.
另一方面,使用std::shared_ptr和复制涉及不必要的原子增量(用于创建副本)和减少(用于销毁原件).对于当今的高速缓存,多核处理器而言,原子操作当然远非便宜.
因此,只需坚持您的代码的预期语义(独特的所有权,由其惯性表达std::unique_ptr),您将获得良好的性能作为奖励.
| 归档时间: |
|
| 查看次数: |
444 次 |
| 最近记录: |