malloc与new的区别

来源:互联网 发布:中国话剧 知乎 编辑:程序博客网 时间:2024/05/29 02:47

malloc是一个函数,原型为 void* malloc(size_t size); new 是一个操作符

malloc只是分配内存,没有创建对象;new 是创建一个对象

对于非基本数据类型,用malloc分配内存时是不会调用对象的构造函数的;利用new新建对象时会调用构造函数

误区更正:之前一直以为malloc只能给基本数据类型分配空间,其实从malloc可以给struct分配内存就知道错了,malloc接受的参数是需要分配的内存大小,根本与类型无关。于是,导出了这样的一个问题:

Q:假设Node是如下的一个结构,Node* ptr = (Node*)malloc(sizeof(Node));ptr -> data = 1;以上两个语句实验证明是没有错的,那编译器是怎么知道分配的内存中有data这个变量呢?

struct Node{int data;Node* left;Node* right;};
答:其实,编译器并不知道malloc()的内存中有data这个变量。只是,在把返回的地址转换成了一个Node类型的指针赋给ptr后,ptr -> data 就可以根据data在结构中的偏移量从ptr指向的地址开始找起,data是第一个变量,所以偏移量为0,data为int类型,占四个字节,故 ptr -> data = 1实际上做的是把从ptr指向的地方开始的前四个字节赋值整数1。不仅在结构是如此,在类中也是如此,因为结构与类没有本质的区别。

那就在此说一下结构与类的区别:

结构与类就一个区别,结构中无修饰符修饰时默认是public,类中默认是private

结构也有默认构造函数,也可以自定义构造函数。用使用new操作符创建一个结构时,也会调用结构相应的构造函数



0 0
原创粉丝点击