gpt4 book ai didi

c++ - std::move(const shared_ptr 引用) 是什么意思?

转载 作者:行者123 更新时间:2023-12-02 10:02:40 26 4
gpt4 key购买 nike

以下是我正在尝试的玩具代码...我理解第一个和第二个。第一个将所有权授予 _p 。第二份p_p 。但我不明白第三个...

std::move 是什么意思?的const shared_ptr &意思是?谢谢。

class P { };

class A {
public:
// first one
A(std::shared_ptr<P> &p, int) : _p(std::move(p))
{
std::cout << "1st Ctor: "
<< p.use_count() << ", " << _p.use_count() << std::endl;
}

// second one
A(const std::shared_ptr<P> &p, std::string) : _p(p)
{
std::cout << "2nd Ctor: "
<< p.use_count() << ", " << _p.use_count() << std::endl;
}

// third one
A(const std::shared_ptr<P> &p) : _p(std::move(p))
{
std::cout << "3rd Ctor: "
<< p.use_count() << ", " << _p.use_count() << std::endl;
}

private:
std::shared_ptr<P> _p;
};

int main()
{
{
std::shared_ptr<P> p = std::make_shared<P>();
A a(p, 1);
std::cout << "1. body: " << p.use_count() << std::endl;
}
std::cout << "-------------" << std::endl;
{
std::shared_ptr<P> p = std::make_shared<P>();
A a(p, "2");
std::cout << "2. body: " << p.use_count() << std::endl;
}
std::cout << "-------------" << std::endl;
{
std::shared_ptr<P> p = std::make_shared<P>();
A a(p);
std::cout << "3. body: " << p.use_count() << std::endl;
}
}

结果是:

$ ./a.out 
1st Ctor: 0, 1
1. body: 0
-------------
2nd Ctor: 2, 2
2. body: 2
-------------
3rd Ctor: 2, 2
3. body: 2

(更新:添加注释以明确哪个是第一个,第二个等)

最佳答案

std::move 只是执行转换并生成 xvalue(右值)。

当通过 const std::shared_ptr<P> 时,其返回类型为 const std::shared_ptr<P>&& 。然后为_p(std::move(p)) copy constructorstd::shared_ptr (但不会调用move constructor,它将右值引用指向非常量),效果与第二种情况相同。

基本上, move 操作倾向于对正在 move 的对象进行修改;它不应该在 const 上工作对象。

关于c++ - std::move(const shared_ptr 引用) 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61817363/

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