关于指针传出值空值判断的有关问题,一个变成习惯,希望能探讨一上,没什么分了。
关于指针传出值空值判断的问题,一个变成习惯,希望能探讨一下,没什么分了。。在参数传出值中,若为指针传出值,
关于指针传出值空值判断的问题,一个变成习惯,希望能探讨一下,没什么分了。。
在参数传出值中,若为指针传出值,假如不对指针进行空值判断,仅判断方法的返回状态,则可能会导致指针的空值访问。此时应该怎么判断?是直接ASSERT就完事,还是ASSERT之后再对它进行处理? 指针 传出值 空值判断 ?ASSERT
[解决办法]
关键点不是返回后的处理,而是设计上要搞清楚为啥要返回空指针。
[解决办法]
这种情况下你应该使用异常,而不是返回值。
[解决办法]1. 防御式
T* p = retrieve();
if(p)
{
//...
p->member();
}
else
{
//...
}
2.契约式
//约定p != 0,比如null object pattern, 或抛出异常
T* p = retrieve();
p->member();
以上两种都可以加上assert以帮助调试。
[解决办法]要加层判断的吧
[解决办法]给用户版本一般都是 Release版本,assert在Release不起动作!!!1
[解决办法]ASSERT 是给你用的,if(NULL)是保证在测试不充分下用户不会遭殃的,
但最根本的是,参数传指针引用应该被严格禁止,
返回指针应该判断空,
不是不信任你的技术,而是对于多代程序员共同维护的代码,
代码封装和语意的明确有时可能远比其他要重要。
[解决办法]不要动不动就assert,除非你是为了调试,想抓取memerydump。加个判断不是更人性化。
[解决办法]用assert的目的不是为了判断空指针,而是为了检查一定不会为空的地方在开发过程中是否正确。
如果p = NULL也是合理的,那么就要用if语句判断并做相应的处理,如果假定p一定不会为NULL,那么可以写一个assert,如果p = NULL引起assert的了,说明你的代码什么地方有问题了,需要修改。
[解决办法]assert只是在开发版用,帮助发现问题。
[解决办法]要知道,开发版不能发现/解决所有问题。
从代码上看,assert(p);说明p== 0 属于异常情况,所以在if(p){....}else{}的else分支中应该修正/记录这种异常。 如果p== 0属于正常情况,那么不应该assert(p);
anyway, 这取决于你的问题域。只有问题域确定了,我们才能给出较好的解。