gpt4 book ai didi

c++ - 当 unique_ptr 超出范围时,它如何不破坏/释放它指向的内存?

转载 作者:太空狗 更新时间:2023-10-29 23:35:01 25 4
gpt4 key购买 nike

如果我有一个未命名的 unique_ptr 对象,持有一个对象 Foo,为什么这个对象在添加到 vector 时不会被删除?

例子:

vec.push_back(std::unique_ptr<Foo>(new Foo())));

为什么 Foo 不会被删除?我试图实现这一点,但我似乎无法弄清楚这一点,因为我在析构函数中删除了该对象。

最佳答案

std::vector::push_back 的参数是一个临时参数,因此它将作为 右值引用 传递给 push_back。正如您在 documentation 中看到的那样, push_back 有两种形式,第二种采用右值引用。 unique_ptr移动到 vector 中,您为参数创建的临时对象将不再拥有内存。

你不能复制一个std::unique_ptr;如果你尝试这样做,你会得到一个编译错误。但是,移动唯一指针是完全允许的;以前的所有者不再拥有它曾经指向的内存。

关于c++ - 当 unique_ptr 超出范围时,它如何不破坏/释放它指向的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51393108/

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