Ber*_*een 24 c c++ null pointers
我见过很多像这样的代码:
SomeType* ptr = NULL;
ptr = SomeMethod(some, params);
Run Code Online (Sandbox Code Playgroud)
重点是什么?我也看到它在ptr其他地方声明的地方(例如在类定义中),然后在类构造函数中有这样的:
ptr = NULL;
ptr = SomeMethod(some, params);
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这样做.当然这ptr = NULL条线路没用?
小智 34
如果"SomeMethod"抛出异常,SomeType*将继续指向你不希望它指向的东西.因此,如果您不希望它指向旧的东西,那么将指针设置为null绝对是一个好习惯.
Mat*_*son 16
除了抛出适用于C++的异常的非常好的点,即使在C中,初始化所有变量也是一个好主意.当编译器确定不需要时,编译器几乎总是优化初始化.
这里有一个例子,说明如果不这样做会发生什么.
SomeType* ptr;
ptr = SomeMethod(some, params);
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,这样可以正常工作,没有ptr有效值也没问题.
现在,有人决定添加更多代码是个好主意:
SomeType* ptr;
int x = someotherfunction;
if (x > 90)
{
ptr = SomeMethod(some, params);
}
Run Code Online (Sandbox Code Playgroud)
现在突然间你ptr会有一些随意的废话内容 - 可能是NULL,但很可能是别的东西.是的,我们都认为我们会记得检查一下,看看我们的改变是否影响了其他等等.但是,如果你已经编程了几年,我几乎可以肯定你曾经有过几例"哎呀,没想到这个".
想象一下,我添加"其他功能"的新代码改为20或30行,您可以清楚地看到问题所在.