C++中 申请一定空间 为什么new比malloc好呢?

来源:百度知道 编辑:UC知道 时间:2024/06/03 14:58:43
如题 本人菜鸟 最好用通俗的话和我说说 最好举个例子

1. new 不但分配对象空间, 还会在分配后调用对象的构造器, 而 malloc 只是分配, 不构造:

class A {
public:
A(): m_value(0)
{
}

public:
int m_value;
};

struct B {
A a;
};

B *pb1 = new B;
B *pb2 = (B *)malloc(sizeof(B));

pb1 因为被 new 调用了构造函数, 所以 pb1->m_value == 0,
pb2 的构造函数没有被调用, 所以 pb2->m_value 的值不确定(即未初始化).

2. new 分配时要指定类型, 是类型安全的; 而 malloc 返回的是 void *, 类型不安全; 类型不安全的东西在 C++ 里是不被提倡的!

如果单纯的申请内置类型的空间的话,两个是没有什么区别的,就是用
new比较方便。
但是如果要申请类类型的空间的话,用malloc就不行。因为在申请的时候类需要初始化成员,在用malloc的时候,不会调用类的构造函数
而用new则可以调用类的构造函数来初始化类成员。如果用malloc来申请类类型的空间编译器会报错。因此在c++中,要申请空间,不管是内置的还是类类型的,最好都用new.

分配内存是一样的,正如楼上所说的,只是new要简洁一些,但是在释放内存的时候就不一样了,用new是用delete释放,malloc是用free释放,delete释放更安全一些,内存释放得更干净

同学,你也许弄错了,NWE和MALLOC都一样,都是请求系统分配内存,没有谁比谁好。
但是,在下程序中,写NEW比写MALLOC简洁,方便。而且不要计算分配的字节。
如:
假如你定义一个结构体:
typedef struct student{
.....
}student;
用malloc: student=(*student)