【发布时间】:2013-01-11 06:49:35
【问题描述】:
在进行编程时,我使用断言以及 NULL 指针验证。
但据我所知,断言仅在 DEBUG 模式下有用。
我的问题是假设我有一个内部指针,我确信它不能是 NULL 示例函数返回一个指针(但指针不是类的成员),在这种情况下我可以使用 assert
test* ptr = fun(); // return a pointer of type test
assert(ptr);
//do some operation
或NULL指针验证
test* ptr = fun(); // return a pointer of type test
assert(ptr);
if (NULL != ptr)
{
//do some operation
}
这里哪个代码实践是好的。据我了解,它将是第二个。 因为我遇到过一些情况,由于一些我们想不到的异常情况,ptr的值返回NULL。
但是我们还有其他更好的选择吗?
【问题讨论】:
-
为什么这个问题被投票赞成关闭?这是一个有效的问题。
-
你考虑过不返回null吗?写代码会容易得多。 IE。空数组/特殊null objects 和异常可能会显着限制返回 null 并因此检查它的需要。
-
@AlexeiLevenkov 检查第二种情况
-
如果你爱上了
assert(),那么both一致。assert(ptr && "Unexpected NULL pointer"); if (ptr) {...}。仅选择 assert() 会忽略您在发布版本中首先进行断言的原因,并且仅选择 if (ptr) 会隐藏您在调试版本中将要开始的迂腐。 -
@Amit0440 在 C 和 C++ 中,零表示
false,非零表示true用于布尔评估。老实说,在现在的多代 C 和 C++ 语言的这一点上,这是一个品味问题。给每个人他/她自己的。
标签: c++ visual-c++ assert