我想提供静态辅助函数来处理类的数据类型。我考虑将它们包括在课堂上。它们会为每个新的类实例实例化还是只实例化一次?
问问题
568 次
3 回答
6
函数不是“实例化的”(除非它们是函数模板)。
类是实例化的,类的实例是对象。每个对象都占用内存空间,但函数只是过程,由编译器一次性生成的代码片段,并且每次实例化新对象时都不会为它们分配内存空间。
函数可以隐式地作用于类的实例(如果函数是成员函数),但这只是通过将隐式指针传递给它们工作的对象来完成。因此,即使在成员函数的情况下,无论是它们static
还是非1static
,代码片段都不会激增。
如果您要问是否只为static
函数生成一段代码,而不是几段单独的代码,那么答案是“是”;但是对于成员函数,答案还是一样的。
1实际上,virtual
成员函数确实需要为具有至少一个成员virtual
函数的类的每个实例存储一个附加指针(该指针将指向所谓的vtable)。但是,static
函数不能是virtual
,因此这不适用于您在问题中考虑的情况。
于 2013-04-05T15:43:37.843 回答
4
不,没有与static
成员函数相关的每个实例的开销。
此外,除了一个例外,任何成员函数都没有与每个实例相关的开销。例外是向一个没有任何虚函数的类添加一个虚函数;通常,这会为类的每个实例添加一个额外的指针。添加更多的虚拟函数不会产生更多的每个实例的开销。
于 2013-04-05T15:41:27.217 回答
1
成员函数(静态或其他)只被实例化一次。在任何情况下,他们都不会给班级增加任何开销。
于 2013-04-05T15:41:20.560 回答