首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么C++中的默认用户定义析构函数会增加执行时间?

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

Stack Overflow用户
提问于 2012-04-24 17:51:12
回答 1查看 392关注 0票数 1

在我的项目中,我们有一个用户定义的默认析构函数,它是为了遵循项目的一些编码标准要求而编写的。这个析构函数的类被实例化超过200次,这增加了整个响应时间,当这个析构函数被删除时,我观察到响应时间提高了28毫秒。有人能解释为什么这个时间差异,尽管这些只是默认的析构函数,但由用户定义,编译器无论如何都会调用这些函数。

在使用“用户定义的默认析构函数”时,我指的是一个空的析构函数:

~Classname(){ };

什么也不做,只是为了满足项目的标准而增加。

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

1.Destructors声明为“虚拟”。

2.The静态类和单例类的析构函数。

使用‘’关键字创建对象的类的3.The析构函数。

使用“”关键字删除对象的类的4.The析构函数。

EN

回答 1

Stack Overflow用户

发布于 2012-04-24 19:27:08

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

如果

  • MSVC返回具有用户定义析构函数的对象(即使该析构函数为空),则它们无法内联函数。在我测试过的任何编译器上,
  • Type特性(如is_trivialis_pod等)都不能以您希望的方式与空析构函数一起工作。这可能会改变特定类型的某些算法或容器的实现方式。
  • 用户定义析构函数可能会更改异常处理代码,因为编译器必须创建用于展开堆栈的代码。同样,如果我记得正确,MSVC也不能正确识别空析构函数。如果T有非平凡的析构函数,那么
  • 您使用new T[]所做的每一次分配都必须为项计数分配额外的空间。此外,这可能会改变内存块的对齐方式,这会真正影响性能。对于空的destructors.

,MSVC或g++都没有对其进行正确的优化。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10303288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档