当前位置:  开发笔记 > 编程语言 > 正文

哪个版本的safe_delete更好?

如何解决《哪个版本的safe_delete更好?》经验,为你挑选了4个好方法。

我不会说,因为两者都会给你一种虚假的安全感.例如,假设您有一个功能:

void Func( SomePtr * p ) {
  // stuff
  SafeDelete( p );
}

将p设置为NULL,但函数外部的p副本不受影响.

但是,如果你必须这样做,那么使用模板 - 宏总是有可能在其他名称上进行打击.



1> 小智..:

我不会说,因为两者都会给你一种虚假的安全感.例如,假设您有一个功能:

void Func( SomePtr * p ) {
  // stuff
  SafeDelete( p );
}

将p设置为NULL,但函数外部的p副本不受影响.

但是,如果你必须这样做,那么使用模板 - 宏总是有可能在其他名称上进行打击.


+1删除后将指针设置为NULL很少有意义.

2> Bodo Thiesen..:

删除一个;

ISO C++指定,对NULL指针的删除不做任何事情.

引用iso 14882:

    5.3.5 Delete [expr.delete]

    2   [...] In either alternative, if the value of the operand of delete is the 
        null pointer the operation has no effect. [...]

此致,Bodo

/编辑:我没注意到a = NULL; 在原帖中,所以新版本:删除一个; 一个= NULL; 但是,已经指出了设置a = NULL的问题(错误的安全感).



3> Johannes Sch..:

显然功能,原因很简单.宏多次计算其参数.这可能有邪恶的副作用.该函数也可以作用域.没有比这更好的了:)



4> gimpf..:

通常,首选内联函数而不是宏,因为宏不考虑范围,并且在预处理期间可能与某些符号冲突,从而导致非常奇怪的编译错误.

当然,有时模板和功能不会,但在这种情况并非如此.

此外,更好的安全删除不是必需的,因为您可以使用智能指针,因此不需要记住在客户端代码中使用此方法,而是封装它.

(编辑),正如其他人所指出的,安全的,删除是不是安全,因为即使有人也不会忘记使用它,它仍然可能不会收到预期的效果.所以它实际上完全没有价值,因为正确使用safe_delete需要更多的思考,而不仅仅是自己设置为0.

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有