C++标准为何允许空但非空指针的shared_ptr存在?
- 本问题与另一讨论空但非空shared_ptr的问题不同,后者旨在解决特定问题,而本文询问的是该标准特性背后的原理与设计原因。
- 本问题是另一相关问题的前置问题,二者共享部分背景,但可独立解答。
C++标准为shared_ptr提供了别名构造函数:
template <typename T> class shared_ptr { template <typename U> shared_ptr(const shared_ptr<U>& r, element_type* ptr); };
该构造函数可以创建这样的shared_ptr对象:它与r共享同一对象的所有权,同时存储指向另一对象的指针ptr。
此外,标准明确允许通过该构造函数创建**不拥有任何对象(符合“空”的定义)但仍指向某对象(即“非空指针”)**的shared_ptr:
[util.smartptr.shared.const]:
17. [注2:本构造函数允许创建存储非空指针的空shared_ptr实例。——结束注]
原本可以轻易禁止构造这类空但非空指针的shared_ptr(例如要求构造时抛出异常),但标准选择允许其存在,因此想知道其设计原因与用途。
空但非空指针的shared_ptr的预期标准使用场景是什么?
内容的提问来源于stack exchange,提问作者Igor G
相关产品推荐
相关产品推荐

