1

取消引用无效指针或智能指针时代码崩溃。添加了一个断言来帮助查找问题。例如,

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;

这可行,但可读性不好,并且可能由于粗心使用宏而存在一些隐藏问题。还有更好的方法吗?谢谢。

4

3 回答 3

2

或者在某些情况下是否值得使用某种抛出异常的智能指针?

于 2013-02-23T18:29:53.863 回答
1

通常人们会写,

if ( p ) p->f

或者

 p && p->f

使用短路 AND 运算符

于 2013-02-23T18:17:17.137 回答
1

您可以为给定类型重载运算符->,并可能在其中添加断言函数。我从来没有这样做过,但它可能会奏效。

于 2013-02-23T18:45:45.960 回答