您正在创建一个结构,您需要在以后的程序中销毁它。但是,由于某些错误,结构实际上可能没有被分配,所以您需要检查指针是否有效(编辑:检查NULL不能确保指针是有效的,参见LucasHenrique's and Giorgi's comments)。基本上你可以用两种方式来做。
在“顶部”处检查:
C.主要:
struct my_struct* foo = create();
...
if (foo) {
destroy(foo);
}mystruct.c:
void destroy(struct my_struct* foo) {
/* Do clean up */
}检查“底部”:
C.主要:
struct my_struct* foo = create();
...
destroy(foo);mystruct.c:
void destroy(struct my_struct* foo) {
if (foo) {
/* Do clean up */
}
}第一种方法确保用户正确地清理所有内容,但是第二种方法在main.c中给出了更清晰的代码(尽管在这种情况下,“破坏”可能不是这个函数的最佳名称)。我真的不能决定我应该遵循哪一个原则,我想知道其中一个原则是否有什么真正的缺点?
发布于 2015-04-21 18:41:46
destroy()函数应该明确地检查是否有任何事情要做。
此外,需要编写和编译的代码更少,因为想必有许多对destroy()的调用,但只有一个实例。
请注意,当指针被调用时,destroy()不能使其空出:
foo = create ();
/* use foo a lot */
destroy (foo);
/* No matter what destroy() does, foo is unchanged here */
/* and can be dangerously dereferenced to inspect or modify the object, etc. */发布于 2015-04-21 18:40:49
假设您正在编写一个公共图书馆。如果以C库为例,在大多数函数中,必须将指针传递到有效对象(空指针不为空指针)。一个例外是free函数(类似于destroy函数),它允许free(NULL)并使用这样的参数执行不操作。
https://stackoverflow.com/questions/29780478
复制相似问题