You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++标准为何允许空但非空指针的shared_ptr存在?

关于空但非空指针的std::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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 02:27:42