没有析构函数的C ++函数

巴里·加克尔

我正在编写一个裸机C ++应用程序,它将进入无限循环,然后再也不退出。

我有许多对象将在main()的顶部构造,并且永远不会离开范围。内存(代码和RAM)都非常宝贵,因为我只有几个k字节可以使用。

优化程序是否会为我总体上删除未使用的析构函数?如果不是,是否有办法告诉编译器不要生成任何默认析构函数?

另外,有没有类似的方法可以消除类随附的其他一些默认函数(复制构造函数等)。

彼德

使用C ++ 11,可以删除默认的析构函数和其他一些成员函数。对于一堂课,A可以做到这一点。

 ~A() = delete;

也就是说,删除析构函数确实会对如何创建实例产生一些限制。

对于较旧的(C ++ 11之前的版本)编译器,只需不声明析构函数即可。尽管编译器通常会创建一个析构函数,但它通常是内联的且不执行任何操作-因此,编译器可能会选择完全消除代码。

您还需要阅读编译器文档(或检查其发出的代码)以了解其实际功能。在消除未使用的代码(包括deleteC ++ 11中的d成员函数)时,您依赖于编译器的实现质量。您可能还会发现,不同的优化设置会影响其功能(例如,是否由空的内联编译器生成的析构函数实际上已被优化为不存在)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章