如果我使用自定义删除器创建单个shared_ptr,并且该shared_ptr被销毁,则自定义删除器将被调用 - 在该删除器的主体内,shared_ptr的引用计数的值是多少? 1 还是 0?
我在文档中找不到它。这是标准所保证的吗?
[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++,但想必他们也会这样做。