内容7 内存管理 1​​

发布时间:2026/7/14 19:30:01
内容7 内存管理 1​​ 、上图中new A(1)不是创建一个匿名对象而是按照类创建了一个对象以上程序会因为申请内存过大而失败假设不管就会抱错。这里如下图显示有异常必须捕获不然终止报错尝试捕获exception是库中异常的类型这里先写就行当运行到某处申请失败时就会直接跳转到catch,再继续走再次运行如下显示申请内存失败new和delete是用户进行动态内存申请和释放的操作符operator new和operator delete是系统提供的全局函数new在底层调用operator new全局函数来申请空间delete在底层通过operator delete全局函数来释放空间new创建一个对象时返回一个指向该对象的地址。使用delete时直接从new开辟空间后返回的指针处开始析构一个对象然后free一个对象。当用new创建多个自定义类型时会额外开辟4字节用来存放对象个数为了后面使用delete[]时让编译器知道要析构几个对象返回一个指向首个对象的地址不是开辟空间的开端而是中端。用delete[]释放时会将返回的指针自动向前移动4字节进行释放读取到要析构几个对象然后再进行free释放。注意free时只能 从开辟的完整空间 的开头处开始释放空间否则报错类内没有析构函数编译器会进行优化行为认为它没有申请资源不会调用析构函数所以new创建多个对象时也就不需要额外开辟4字节用来存放对象个数此时返回的是开辟的完整空间的开头处使用delete不会调用析构函数直接free new开辟的整个完整空间没报错程序正常运行。