C++ 如何安全地将unique_ptr与可以返回NULL的函数一起使用?

C++ 如何安全地将unique_ptr与可以返回NULL的函数一起使用?,c++,c++14,smart-pointers,unique-ptr,C++,C++14,Smart Pointers,Unique Ptr,我注意到,这包括: #include<memory> #include<iostream> using namespace std; int main() { unique_ptr<int>a(nullptr); if(!a) cout<<"NULLPTR"; } #包括 #包括 使用名称空间std; int main() { 唯一的ptra(nullptr); 如果(!a) cout这很好。造成问题的只是NULL宏(在大

我注意到,这包括:

#include<memory>
#include<iostream>
using namespace std;
int main()
{
    unique_ptr<int>a(nullptr);
    if(!a)
    cout<<"NULLPTR";
}
#包括
#包括
使用名称空间std;
int main()
{
唯一的ptra(nullptr);
如果(!a)

cout这很好。造成问题的只是
NULL
宏(在大多数编译器上扩展为
0
)。
0
匹配
nullptr\t
t*
unique\ptr
的构造函数,因此它不明确,无法编译

当使用指针变量或函数的返回值初始化
unique\u ptr
时,无论是使用
NULL ptr
NULL
还是
0
,它们都具有相同的效果:NULL指针:

例如,这是非常好的

int* int_p1 = NULL;
int* int_p2 = (int*)malloc(sizeof(int));

unique_ptr<int, decltype(&free)> a1(int_p1, free);
unique_ptr<int, decltype(&free)> a2(int_p2, free);
int*int_p1=NULL;
int*int_p2=(int*)malloc(sizeof(int));
唯一的ptr a1(内部p1,免费);
唯一的ptr a2(内部p2,免费);

注意:如果不使用C代码函数,使用<代码> MARROCK()/CUD>分配,但使用C++代码的函数< <代码> < /C> >,不要使用自定义删除器。默认代码的删除器> UngQuyPPTR <代码>已经使用<代码>删除< />代码>

< P> >,这只是“<代码> null <代码>宏”(在大多数编译器上扩展为
0
)这就是问题的根源。
0
匹配
unique\u ptr
nullptr\t
t*
构造函数,因此它不明确且不会编译

当使用指针变量或函数的返回值初始化
unique\u ptr
时,无论是使用
NULL ptr
NULL
还是
0
,它们都具有相同的效果:NULL指针:

例如,这是非常好的

int* int_p1 = NULL;
int* int_p2 = (int*)malloc(sizeof(int));

unique_ptr<int, decltype(&free)> a1(int_p1, free);
unique_ptr<int, decltype(&free)> a2(int_p2, free);
int*int_p1=NULL;
int*int_p2=(int*)malloc(sizeof(int));
唯一的ptr a1(内部p1,免费);
唯一的ptr a2(内部p2,免费);

注意:如果您没有与使用
malloc()的C函数接口分配,但使用C++函数的<代码> < <代码>,不使用自定义删除器。默认代码的删除器> UngQuyPPTR <代码>已经使用<代码>删除>代码> .< /P> <代码> null <代码>是一个过时的空指针常数,被弃用,赞成NulLPTR。这些常量是编译时构造

NULL
不推荐使用,因为除了指定NULL指针值外,它还根据上下文指定整数零。(它是定义为
0
的宏)。这很危险且容易出错,因此
unique\u ptr
特别禁止使用它


在运行时,函数不可能返回空指针常量,它属于完全错误的类别。它返回空指针值。此时,既没有
null
,也没有
nullptr

null
是一个过时的空指针常量,不赞成使用
nullptr
。这两个常量都指定了相同的东西,一个空指针值。这些常量是编译时构造

NULL
不推荐使用,因为除了指定NULL指针值外,它还根据上下文指定整数零。(它是定义为
0
的宏)。这很危险且容易出错,因此
unique\u ptr
特别禁止使用它


在运行时,函数不可能返回空指针常量,这属于一个完全错误的类别。它返回空指针值。此时,既没有
null
也没有
nullptr

null
不是问题;这是您对它所做的操作。函数返回
Type*
不是键入的o调用者,无论它是否返回
NULL
nullptr
(您应该使用它),或者其他什么。奇怪的是,您询问了“可以返回
NULL
的函数”,但没有发布这样的函数作为示例来展示您的担忧。@WhozCraig我已经添加了我正在使用的库的链接。您可以检查页面上给出的第一个函数。
NULL
不是问题;问题在于您如何处理它。函数return
Type*
被键入调用者,无论它是否返回
NULL
nullptr
(您应该使用它),或者其他什么。奇怪的是,您询问了“可以返回
NULL
”的函数,但没有发布这样的函数作为示例来表达您的担忧。@WhozCraig我添加了我正在使用的库的链接。您可以查看页面上给出的第一个函数。