为了账号安全,请及时绑定邮箱和手机立即绑定

请问使用new实例化时返回NULL,该如何通过构造函数实现吗?

请问使用new实例化时返回NULL,该如何通过构造函数实现吗?

陪伴而非守候 2022-04-21 14:15:12
C++中我想让一个类在用new实例化的时候某些情况下返回NULL(不是指在构造失败的时候不抛异常)应该如何做到?通过构造函数实现吗?
查看完整描述

3 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

new是运算符啊,在标准C++中,是不会返回NULL的,如果内存分配失败的话,会抛出系统异常的。虽然CRT中的new可以返回Null,那也是在内存不足的时候。 
Beginning in Visual C++ .NET 2002, the CRT's new function (in libc.lib, libcd.lib, libcmt.lib, libcmtd.lib, msvcrt.lib, and msvcrtd.lib) will continue to return NULL if memory allocation fails. However, the new function in the Standard C++ Library (in libcp.lib, libcpd.lib, libcpmt.lib, libcpmtd.lib, msvcprt.lib, and msvcprtd.lib) will support the behavior specified in the C++ standard, which is to throw a std::bad_alloc exception if the memory allocation fails.[1]

查看完整回答
反对 回复 2022-04-24
?
收到一只叮咚

TA贡献1821条经验 获得超5个赞

在类当中重载new运算符可以实现,如
bool nonew;
class A{
public:
A(int t):a(t){
}
int a;
void* operator new(unsigned int s){
if(nonew)return NULL;
else return malloc(s);
}
};
这样一来nonew就成为了new A(...)是否返回NULL的开关


查看完整回答
反对 回复 2022-04-24
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

class A
{
public:
A* create()

{

if (...)

{

m_a = new A();

return m_a;

}

else

{

return null;

}

}
private:
A(){}

A* m_a;

}
把构造作为私有,然后自己写个create之类的成员函数应该就可以满足你的要求了吧。



查看完整回答
反对 回复 2022-04-24
  • 3 回答
  • 0 关注
  • 380 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号