gpt4 book ai didi

c++ - shared_ptr 赋值 - 是否也复制了自定义删除器?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:17:31 26 4
gpt4 key购买 nike

许多文档都指出在分配时复制托管对象。似乎没有什么是关于删除器或控制 block 的。

例如:

std::shared_ptr<A> a(new A, D());
std::shared_ptr<A> b;

b = a;

如果 b 是最后剩下的所有者并且 b 超出范围,是否会调用自定义删除器 D()?

最佳答案

是的。创建对象时设置删除器。共享指针管理具有删除器的控制结构中的引用计数。

std::shared_ptr<A> a(new A, D());

此行创建一个新的共享对象,其控制结构包含一个删除器和一个引用计数。它还会创建指向该对象和控制结构的共享指针。

std::shared_ptr<A> b;
b = a;

这会创建对该对象和控制结构的第二个引用,将其引用计数增加到两个。

保存共享对象的唯一引用计数的相同结构也包含删除器。

关于c++ - shared_ptr 赋值 - 是否也复制了自定义删除器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31365184/

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