当取消引用无效指针或智能指针时代码崩溃。添加一个断言以帮助找到问题。例如,
Type* p = NULL; // Always initilize to be null.
assert(p); // Add before dereferencing to help to find the problem.
p->f(); // Crashes if p is invalid.
我的问题是如何在解除引用指针时自动添加断言。例如,
#define PTR_RUN(p, f) assert(p); p->f;
这有效但不易读,可能会因粗心使用宏而产生一些隐藏的问题。有更好的方法吗?感谢。
答案 0 :(得分:2)
或者可能值得使用在某些情况下抛出异常的某种智能指针?
答案 1 :(得分:1)
通常人们会写,
if ( p ) p->f
或
p && p->f
使用短路AND运算符
答案 2 :(得分:1)
您可以为给定类型重载运算符->
,并可能在其中添加断言函数。我从来没有这样做但它可能有用。