为什么C++中的默认用户定义的析构函数会增加执行时间?

Art*_*rti 1 c++ destructor

在我的项目中,我们有1个用户定义的默认析构函数,它是为了遵循项目的一些编码标准要求而编写的.这个析构函数的类被实例化了200多次,这增加了整体响应时间,当这个提到的析构函数被删除时,我观察到响应时间改善了28毫秒.任何人都可以解释为什么这个时间差异,虽然那些只是默认的析构函数,但由用户定义,无论如何将由编译器调用.

使用"用户定义的默认析构函数"我的意思是一个空的析构函数:

~Classname(){ };

什么都不做,但是为了满足项目的标准而被添加.

为了增加更多的清晰度,这个析构函数不属于以下类别:

1.声明为"虚拟"的教师.

2,静态和单体类的析构函数.

3.使用"new"关键字创建对象的类的析构函数.

4.使用'delete'关键字删除对象的类的析构函数.

Tim*_*imo 5

我遇到过几个编译器无法正确识别空析构函数的地方

  • 如果MSVC返回具有用户定义的析构函数的对象,则它们不能内联函数,即使该析构函数为空.

  • 键入类似性状is_trivial,is_pod等不工作,你会想空析构函数的方式,对我测试过的任何编译器.这可能会改变某些算法或容器针对特定类型的实现方式.

  • 用户定义的析构函数可能会更改异常处理代码,因为编译器必须创建用于展开堆栈的代码.同样,如果我没记错的话,MSVC也无法正确识别空的析构函数.

  • new T[]如果T具有非平凡的析构函数,那么您执行的每个分配都必须为项目计数分配额外的空间.此外,这可以改变内存块的对齐,这可能真正损害性能.对于空的析构函数,MSVC或g ++都没有正确地优化它.