在第五版C ++ Primer第5版(p.470)中:
unique_ptr<T, D> u(d)
:空unique_ptr
指向使用T
的{{1}}类型的对象,d
必须是D
类型的对象,而不是{ {1}}。
但是,当我尝试提供没有指针对象的删除函数时,编译器(Visual Studio 2015)会抱怨(没有构造函数的实例与参数列表匹配)。如果我将delete
指针与删除器一起提供,它就可以正常工作。
那么,我是在误解某些东西还是这本书错了?如果这本书出错了,还有其他方法我可以单独为unique_ptr
提供指针和删除吗?
答案 0 :(得分:1)
您尝试调用的构造函数不存在。根据{{3}},唯一采用删除函数的构造函数也会使用指针。如果您想使用删除工具初始化unique_ptr
但又不想为其提供值,则可以始终将nullptr
作为第一个参数传递,并调用MSDN来提供它是一个稍后管理的指针。