gpt4 book ai didi

c++ - unique_ptr 何时在此 setter 上重置?

转载 作者:行者123 更新时间:2023-11-30 05:43:28 25 4
gpt4 key购买 nike

class A
{
...
B b;
}

我传入的 unique_ptr 什么时候被移除?

void A::SetB( unique_ptr<B> b )
{
this->b = *b;
} // At end of scope, is `b` now reset
// and the `B b` in class `A` just stores the value in it?

如果上面的答案是否定的,它不会被删除......这会删除它吗:

void A::SetB( unique_ptr<B> b )
{
this->b = *move(b);
} // At end of scope, is `b` now reset
// and the `B b` in class `A` just stores the value in it?

或者如果我希望在那时删除它,我必须自己重置它:

void A::SetB( unique_ptr<B> b )
{
this->b = *b;
b.reset();
}

最佳答案

在前两种情况下 unique_ptr在函数 SetB 时被重置返回。在这两种情况下您都不会泄漏任何内存,但您所做的事情很奇怪。

第一种情况

this->b = *b;

unique_ptr::operator* 返回对托管对象的引用。因此,您正在复制分配 B unique_ptr<B> 中包含的实例类数据成员的参数 b .

第二种情况

this->b = *move(b);

行为与第一个完全相同。这次你所做的不同之处在于调用 unique_ptr::operator*unique_ptr<B>&& 上( std::move 只是将其参数转换为右值引用)。

在这两种情况下都是 unique_ptr参数保留 B 的所有权实例 SetB最初是用 with 调用的,当函数返回时它会销毁它。


您的用例看起来不像是您应该使用 unique_ptr 的用例总之,您只需要一个二传手。大概是下面的

void A::SetB( B b )
{
this->b = move(b);
}

关于c++ - unique_ptr 何时在此 setter 上重置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30203845/

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