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