所以我读过this关于类定义是否占用内存,this关于函数是否占用内存。这是我没有得到的:如果函数执行,或者代码如何,类定义怎么不占用内存。我的意思是,类定义也是代码,所以不应该像函数代码那样占用内存吗?
答案 0 :(得分:4)
说类定义不占用内存并不完全正确:任何具有成员函数的类都可能会在内存中放置一些代码,尽管代码量及其实际位置在很大程度上取决于函数内联。
第一个链接上的Q& A讨论sizeof
,它显示了类的每实例内存需求,它排除了存储成员函数,静态成员,内联函数,调度表和内存的内存要求。等等。这是因为所有这些元素都是在类的所有实例之间共享。
答案 1 :(得分:0)
您不需要将类定义保留在任何位置,因为有关如何创建类实例的详细信息在其构造函数中进行编码。
(从某种意义上说,类定义是代码,它没有明确表示。)
为了创建对象,您需要知道的是
创建类A
的实例:
sizeof(A)
的内存(或将其交给一位),A
的虚拟函数相关联,如果有的话(通常保存在预定位置的表中),A
的相关A
构造函数,然后让它执行实际工作。您不需要了解有关成员变量类型或类似内容的事情,构造函数知道一旦知道 要创建对象,该怎么做。<登记/> (每个成员变量都可以在对象开头的偏移处找到,因此构造函数知道必须在哪里。)
另一方面,要创建函数,您需要以某种形式存储其定义,然后在运行时生成代码。 (这通常称为&#34;即时&#34;编译。)
这需要编译器,这意味着你需要
C ++编译器会提前生成函数 滥用术语一点,你可以说功能是&#34;实例化&#34;通过编译过程,将源代码作为蓝图。