C++ unique_ptr源码中pointer()是什么?是否为构造函数调用?
问题解答
首先明确结论:pointer() 不是调用原生指针的构造函数,原生指针属于标量类型,不存在类语义的构造函数,这里是C++的*值初始化(value initialization)*语法。
具体作用
- 对于原生指针这类标量类型,值初始化的效果是零初始化,对应指针类型就是得到空指针,此处
pointer()的效果完全等价于static_cast<_Tp*>(nullptr),用来给unique_ptr内部持有的指针初始化为空值。 - 这么写的核心目的是兼容泛型场景:
unique_ptr::pointer不一定永远是原生_Tp*类型。如果自定义删除器_Tp_Deleter内部定义了嵌套的pointer类型,unique_ptr会优先采用删除器定义的自定义指针类型,这种写法对原生指针、自定义指针类型都通用,不需要针对不同的pointer类型做特殊适配。
附加说明
你看到的这段默认构造函数还有额外的安全校验:静态断言要求当删除器是函数指针类型时,不能调用这个无参构造,避免构造出持有空函数指针删除器的unique_ptr,后续析构/释放时触发未定义行为。
内容的提问来源于stack exchange,提问作者gy gy
相关产品推荐
相关产品推荐

