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

时间:2015-05-16 04:19:46

标签: c++ destructor bare-metal

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

我有许多对象将在main()的顶部构建,并且永远不会留下范围。内存(代码和RAM)都很重要,因为我只有几个k字节可以使用。

优化器通常会为我删除未使用的析构函数吗?如果没有,有没有办法告诉编译器不要生成任何默认的析构函数?

此外,是否有类似的方法来摆脱类附带的一些其他默认函数(复制构造函数等)。

2 个答案:

答案 0 :(得分:3)

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

 ~A() = delete;

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

对于较旧的(pre C ++ 11)编译器,只是不要声明析构函数。虽然编译器通常会创建一个析构函数,但它通常是内联的并且什么都不做 - 因此编译器可能会选择完全消除代码。

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

答案 1 :(得分:1)

如果您使用的是C ++ 11,则可以删除默认的析构函数。检查以下代码:

class A
{
    public:
        ~A() = delete;
};