这篇文章对"passing shared_ptr in reference"是正确的吗?

Is this post correct about "passing shared_ptr in reference"?

本文关键字:reference in ptr 文章 passing shared      更新时间:2023-10-16

有人问"我应该通过引用的方式通过shared_ptr吗",他得到了这个有很多支持票的回复。https://stackoverflow.com/a/8385731/5543597

这让我想知道为什么他有这么多支持票,如果他说的是真的:

这取决于你想要什么。被叫方是否应分享对象?然后它需要自己的shared_ptr副本。所以通过吧按价值。

如果函数只需要访问调用者拥有的对象,请转到超前传递(const)引用,以避免复制的开销shared_ptr。

C++中的最佳实践始终是拥有明确定义的所有权对象的语义。对于取代实际想法。

如果总是按值传递共享指针,则成本会很高(因为它们的复制成本比原始指针高得多)。如果你从来没有这样做,那么在第一个中使用共享指针就没有意义了位置

当新函数或对象需要共享时,复制共享指针指针对象的所有权。

特别是在这里:

被调用者是否应该共享对象的所有权?然后它需要自己shared_ptr的副本。所以按值传递。

为什么要通过传递值来创建shared_ptr的副本,而它可以是引用,并且一旦被调用者决定将其存储在数据中,他就可以使用收到的引用来复制shared_ptr?

或者这个:

如果你从不这样做,那么在第一名。

当通过引用将其传递给函数时,它仍然存在于父函数中。一旦决定存储它,就可以毫无问题地进行存储。

这些说法正确吗?

是的,答案是正确的。

为什么要通过传递值来创建shared_ptr的副本,而它可以是引用,并且一旦被调用者决定将其存储在数据中,他就可以使用收到的引用来复制shared_ptr?

你可以这么做。但是传递值充当了被调用者可能会制作副本的自文档。此外,通过值传递的优点是,函数可以用右值调用并移出,例如func( make_shared<T>() );

相关文章: