一般鼓励使用初始化列表。现在让我们说我有以下代码(简单的例子只是为了让问题更清楚):
class foo
{
public:
foo(ptr1* a, ptr2* b) : m_a(a), m_b(b), m_val(a->val) {}
/* code and members here */
};
我想检查a
在尝试取消引用它以获取val
之前不为NULL。我有什么方法可以在那里进行健全检查吗?
答案 0 :(得分:5)
#include <cstdio>
class Test
{
int x;
public:
Test(int *px)
: x (px ? *px : -1)
{
printf("%d\n", x);
}
};
int main(int argc, char *argv[])
{
Test(NULL);
return 0;
}
以上示例输出-1
。
答案 1 :(得分:1)
您可以尝试:
foo(ptr1* a, ptr2* b) : m_a(a), m_b(b), m_val(a==nullptr ? 0 : a->val) {}
或者,如果a==nullptr
是编程逻辑中的错误,则可以在对调试版本进行单元测试时使用assert()来捕获它。