这篇文章对"passing shared_ptr in reference"是正确的吗?
Is this post correct about "passing shared_ptr in reference"?
有人问"我应该通过引用的方式通过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>() );
- netcat command in c++
- Difference in displaying cv2 Mat
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- Visual Studio Code "undefined reference to `WinMain@16'"
- C++ MFC Libraries in Travis CI
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 如何在OpenSSL中从configuration.h.in获取configuration.h
- 使用 [] 运算符时"binding reference of type discards qualifiers"
- 为什么创建友元类的实例会导致"undefined reference to"错误?
- 创建具有 new in 函数和"this is nullptr"异常的对象
- IN, OUT, INOUT Parameters
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- c++:在函数返回过程中,"catching reference in value"与"catching value in value"有什么区别?
- 这篇文章对"passing shared_ptr in reference"是正确的吗?
- gcc 未给出的 Clang 错误"attempted to construct a reference element in a tuple with an rvalue"
- 我收到错误:"in function main: undefined reference to Fraction::Fraction()"
- JNI, Java to C++ in Eclipse: undefined reference to '_imp__JNI_CreateJavaVM@12'
- "There is no "reference-to-member" type in C + +",std::bind 和 boost::bind 在同一条船上
- 使用 AVX2 编译时,特征无法使用 "Reference to EBX in function requiring stack alignment" 进行编译
- decltype - "the only context in which a variable defined as a reference is not treated as a synonym