码迷,mamicode.com
首页 > 其他好文 > 详细

new,delete,free,malloca

时间:2021-06-05 18:19:58      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:编译器   oca   运算   情况下   null   野指针   一个   free   let   

free

free(NULL)合法
free(野指针)大概率崩溃,小概率没事,具体要分析源代码
连续两次free,在一些非常有限的情况下,不会崩溃
多次free,在大多数情况下会导致崩溃

手动调用构造和析构函数

比较诡异,c++可以显示调用析构函数,比如A a;a.~A,但是不能显式调用构造函数
并且,编译器会在对象生命周期结束时,自动调用构造函数
利用定位new表达式可以显示调用构造函数,定位new就这一个用途

operator new

operator new是可以重载的函数

首先new operator 和 operator new不一样,不清楚的百度一下
operator new是一个可以用户重载的函数,负责开辟空间(不负责初始化、调用构造函数)
全局operator new一般默认调用malloca开辟空间,全局operator new不应该被重载

但是,可以在类里面重载operator new

编译器在new class()的时候会自动调用重载的operator new,分配空间

特别是,在基类里面重载operator new,会应用到所有派生类

这是一种特别优雅的做法,应用于大规模库比如MFC
operator new重载有一些规定,自己百度

new operator

new operator是运算符

c++标准保证了new operator的行为 :先分配内存,然后初始化
new的时候,本质上先调用operator new分配内存,然后再调用构造函数

new []

如何限制对象只能建立在堆上或者栈上或者全局静态空间

new,delete,free,malloca

标签:编译器   oca   运算   情况下   null   野指针   一个   free   let   

原文地址:https://www.cnblogs.com/XDU-mzb/p/14852289.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!