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++ 里是不被提倡的!