记住,就像正常的变量,当创建一个指针,它的值是未定义的。因此,这是一个好主意来设置所有指针不马上使用0:
同样,当一个动态分配的变量删除,指针指向它不是零。考虑下面的代码片段:
因为pnValue没有被设置为0,if语句条件的求值结果为true,和程序试图分配5分配内存。这几乎不可避免地会导致程序崩溃。这从来就不是一个好主意离开一个指针指向分配内存。释放内存时,设置的指针分配之后立即为0。这有助于确保程序不试着访问内存已经被收回。上面的程序应该写成:
|
1
2
|
int
*pnValue = new
int;int
*pnOtherValue = 0; //
will allocate later |
|
1
2
3
4
5
|
int
*pnValue = new
int;delete
pnValue; //
pnValue not set to 0if
(pnValue) *pnValue
= 5; //
will cause a crash |
|
1
2
3
4
5
6
7
|
int
*pnValue = new
int;*pnValue
= 7;delete
pnValue;pnValue
= 0;if
(pnValue) *pnValue
= 5; |
分配的习惯你的指针设置为0时,他们都宣称(除非指定到另一个地址),和后删除。它可以节省很多的悲伤。
最后,删除一个空指针没有影响。因此,不需要以下几点:
|
1
2
|
if
(pnValue) delete
pnValue; |
如果非空pnValue,动态分配的变量将被删除。如果它是空的,什么都不会发生。
|
1
|
delete
pnValue; |

被折叠的 条评论
为什么被折叠?



