在删除/释放之前不进行空检查会优化对函数的调用吗?

| 关于是否将空检查放在删除之前,存在几个问题。现在,我仍然在许多生产代码中看到了这种做法,而且我不相信所有这些程序员都没有意识到“ 0”是安全的事实。 因此,我想知道是否值得假设在
delete/free
之前进行空检查是否可以通过保存函数调用来提供性能优化?
if(0 != p)
  delete p;
    
已邀请:
        否。
delete
不是函数,但是根据类型的不同,后面可能会有
operator delete
调用。 充其量您最多可以将第二个比较保存到
0
。这全都是过早的优化:这都不是您的瓶颈,并且您正在编写冗余代码。 写吧:
delete ptr;
    
           我不相信所有这些   程序员不知道这一事实   删除0;是安全的。 好吧,他们是。就是这样。
null
上的
delete
free
是绝对安全的事实。如果他们没有意识到这一点,那么他们就不会浪费时间检查它。   因此,我想知道这是否值得   假设之前的空检查   删除/释放将提供   通过节省性能优化性能   函数调用? 您正在做一个假设……因为,您不想相信那些家伙错了吗?抱歉,伙计-他们错了,就是这样。您没有证据或合理的理由相信进行ѭ9支票会带来好处。 或那个编写该代码的人都这么认为。毕竟,即使您可以消除这种方式的函数调用,此处的函数调用的成本也是微不足道的(如果没有内联的话),这很可能是这样,并且程序员花费更多时间编写检查代码,已为您编写。我宁愿过分热衷于正确性,也不愿像这样过早地进行优化-您是否真的建议任何人帮忙,建议它可能是一种优化?     
           现在,我仍然在许多生产代码中看到了这种做法,而且我不相信所有这些程序员都没有意识到删除0的事实;是安全的。 很久很久以前,我们无法保证
delete
(和
free
)不会对空指针造成任何伤害。相反,它们使某些编译器/某些计算机崩溃。因此,实践的起源。 使这种习俗得以维持的是结合了货物崇拜的编程和小脑子的思想(“愚蠢的一致性是小头脑的小妖精。”)。他们复制它的语法。在这种情况下,由于某些代码会执行空指针检查,因此,一个狂热的程序员会认为这是这样做的方法。 心胸狭窄的心态表明只有一种方法可以做到这一点。由于某些没人要触摸的遗留代码会使用此空指针检查,因此所有代码都必须以这种方式释放动态分配的内存。我已经看到了强制执行此行为的多个项目的编码标准(并且那些编码标准本身是由货物崇拜技术创建的)。     

要回复问题请先登录注册