gpt4 book ai didi

c++ - 重新分配智能指针

转载 作者:IT老高 更新时间:2023-10-28 23:15:08 25 4
gpt4 key购买 nike

一般来说,像 std::unique_ptrGlib::RefPtr 这样的智能指针在重新分配指向另一个对象时会删除它们的对象,因为它们是唯一的指针持有该给定对象(显然在 std::unique_ptr 的情况下暗示)?

最佳答案

对于 unique_ptr::reset , [unique.ptr.single.modifiers]/4:

Effects: assigns p to the stored pointer, and then if the old value of the stored pointer, old_p, was not equal to nullptr, calls get_deleter()(old_p).

或移动赋值运算符 operator=(unique_ptr&& u)在 [unique.ptr.single.asgn]/2:

Transfers ownership from u to *this as if by calling reset(u.release()) followed by get_deleter() = std::forward<D>(u.get_deleter()).

(等价于其他赋值运算符模板)


对于 shared_ptr ,重新分配有点不同。 shared_ptr当它不是最后一个拥有它的引用对象时,永远不会破坏它,所以让我们假设它是给定的。
shared_ptr::reset(Y*)在 [util.smartptr.shared.mod]/3 中指定:

Effects: Equivalent to shared_ptr(p).swap(*this).

但很明显,临时对象在函数调用结束时被销毁,销毁了保持对象(如果适用)。
这是相同的行为 operator=(shared_ptr<> const&)有,[util.smartptr.shared.assign]/1 和 4:

Effects: Equivalent to shared_ptr(r).swap(*this).

…移动赋值运算符(模板),rshared_ptr<>&& :

Effects: Equivalent to shared_ptr(std::move(r)).swap(*this).

如果 *this是最后一个拥有该对象的对象,那么现在临时对象是 - 将在内部销毁。


对于 Glib::RefPtr场景类似于 shared_ptr :复制赋值运算符(和赋值运算符模板)是用相同的语义定义的。如果当前 RefPtr分配给别的东西,当前持有的对象引用计数器递减,如果结果计数器值为零,则销毁。

关于c++ - 重新分配智能指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27302548/

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