引用计数器是在自定义删除器之前还是之后减少?

问题描述 投票:0回答:1

如果我使用自定义删除器创建单个shared_ptr,并且该shared_ptr被销毁,则自定义删除器将被调用 - 在该删除器的主体内,shared_ptr的引用计数的值是多少? 1 还是 0?

我在文档中找不到它。这是标准所保证的吗?

c++ shared-ptr
1个回答
0
投票

从 C++ 23 开始,

[util.smartptr.shared.dest]
,它没有具体说明在拥有的对象上调用删除器之前或之后
use_count
是否为 0。它仅指定以下内容:

(1.1) 如果 *this 为空或与另一个 shared_ptr 实例共享所有权 (use_count() > 1),则没有副作用。 (1.2) 否则,如果 *this 拥有一个对象 p 和一个删除器 d,则调用 d(p)。 (1.3) 否则,*this 拥有一个指针 p,并调用删除 p。

因此,这取决于

shared_ptr
的实施者。也就是说,MSVC 在删除之前会递减。不确定 Clang、ICC 或 G++,但想必他们也会这样做。

© www.soinside.com 2019 - 2024. All rights reserved.