第二版-对象创建
12.1 对象创建
当一个 C++ 对象被创建时,有两件事会发生:
-
为对象分配内存。
-
调用构造函数来初始化那个内存。
到目前为止,我们应该确保步骤 2) 一定发生。C++ 强迫这样做是因为未初始化的对象是程序出错的主要原因。不用关心对象在哪里创建和如何创建的—构造函数总是被调用。然而,步骤 1) 可以以几种方式或在可选择的时间内发生:
-
静态存储区域:存储空间在程序开始之前就可以分配。这个存储空间在程序的整个运行期间都存在。你可以想象这是一个永远不会消失的老朋友,无论你的程序跑多久,它都在那儿守护着。
-
栈上分配:无论何时到达一个特殊的执行点(左花括号)时,存储单元都可以在栈上被创建。出了执行点(右花括号),这个存储单元自动被释放。这些栈分配运算内置在处理器的指令集中,非常有效。然而,在写程序的时候,必须知道需要多少个存储单元,以使编译器生成正确的指令。这就像你得在煮饭前确保有足够的米,否则就会尴尬地发现锅里不够放。
-
堆分配:存储单元也可以从一块称为堆(也可称为自由存储单元)的地方分配。这称为动态内存分配,在运行时调用程序分配这些内存。这意味着可以在任何时候分配内存和决定需要多少内存。动态内存分配让你在需要的时候能够灵活应对,就像是突然想开个派对,随时可以搬来更多的椅子。
有关动态内存分配的详细解析可以参考这篇文章:动态内存分配函数解析。如果你对 C 语言中的实现细节感兴趣,可以看看这篇:C语言动态内存分配函数解析。还有关于 C++ 的动态内存分配的探讨:C++动态内存分配研究。
了解了这些不同的存储方式后,你会发现选择合适的内存分配方式不仅影响程序的运行效率,也能极大减少内存错误的发生。想象一下,如果在一个高效的派对上,每个宾客都有座位,食物不断供应,那将是多么完美的场景!
下载地址
用户评论