gpt4 book ai didi

c++ - move std::shared_ptr 的函数声明

转载 作者:搜寻专家 更新时间:2023-10-31 01:32:22 26 4
gpt4 key购买 nike

对于按值传递共享指针与按引用传递共享指针,几乎没有好的答案。但是,我没有找到关于“move ”共享指针的最佳实践的答案。

我有一个函数,它有一个指向对象的共享指针,它不想保留。据我了解, move 它是性能方面的最佳选择,因为我们可以跳过增加然后立即减少引用计数的步骤。但是,我不清楚这两个声明之间是否存在差异:

调用函数

foo(std::move(sourcePtr));

声明应该是

选项 1

void foo(std::shared_ptr<X> x);

或选项 2

void foo(std::shared_ptr<X>&& x);

最佳答案

值得注意的是 std::move实际上并不对对象执行 move ,它只是将对象转换为右值(xvalue)。

那么对于第一种情况,参数x将从sourcePtr move 构建.之后sourcePtr的托管指针将为空。

对于第二种情况,没有 std::shared_ptr正在 build 中; x是右值引用并绑定(bind)到 sourcePtr .那么会发生什么取决于foo()的实现, 和 sourcePtr除非你在里面做,否则不会被 move foo()通过x ,例如std::shared_ptr<X> new_x = std::move(x); .

关于c++ - move std::shared_ptr 的函数声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43484544/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com