静态成员函数是否会增加类的开销?

时间:2013-04-05 15:40:15

标签: c++ inheritance methods static

我想提供静态帮助函数来处理类的数据类型。我考虑将它们包含在课堂上。它们是为每个新的类实例实例化还是仅实例化一次?

3 个答案:

答案 0 :(得分:6)

函数不是“实例化”(除非它们是函数 templates )。

实例化

,类的实例是对象。每个对象在内存中占用空间,但函数只是程序,编译器一次性生成的代码片段,并且每次实例化新对象时都不会分配内存中的空间。

函数可以隐式地处理类的实例(如果函数是成员函数),但这只是通过将隐式指针传递给它们所处理的对象来完成的。因此,即使在成员函数的情况下,无论是static还是非 - static,都不会增加代码片段 1

如果你想询问是否只为static函数生成了一段代码,而不是几段独立的代码,那么答案就是“”;但是,对于成员函数,答案是相同的。

1 实际上,virtual成员函数确实需要为具有至少一个成员virtual函数的类的每个实例存储一个额外的指针(此指针指向所谓的 vtable )。但是,static函数不能为virtual,因此这不适用于您在问题中考虑的情况。

答案 1 :(得分:4)

不,没有与static成员函数关联的每实例开销。

此外,没有与任何成员函数关联的每个实例开销,但有一个例外。例外是将虚函数添加到没有任何类的类中;通常,这会为类的每个实例添加一个额外的指针。添加更多虚拟函数不会产生进一步的每个实例开销。

答案 2 :(得分:1)

成员函数(静态或其他)只会被实例化一次。在任何情况下,他们都不会给课程增加任何开销。