new/delete 与 malloc/free 的区别?
 
- 分配内存的位置 
- malloc是从
堆上动态分配内存 - new是从
自由存储区为对象动态分配内存。自由存储区的位置取决于operator new的实现。自由存储区不仅可以为堆,还可以是静态存储区,这都看operator new在哪里为对象分配内存 
  - 是否可以被重载 
- opeartor new 、operator delete 可以被重载
 - malloc、free则不能重载
 
  - 内存分配 
- malloc内存分配成功后返回void*,然后再
强制类型转换为需要的类型 - malloc内存分配失败后返回 NULL
 
  - new操作符分配内存成功后返回与对象类型相匹配的指针类型;因此new是符合类型安全的操作符 
- new分配内存失败则会抛异常 std::bad_alloc
 - 如果加上
std::nothrow关键字`,UserInfo* info = new (std::nothrow) UserInfo; // new 就不会抛出异常而是会返回空指针 
  
  - 分配内存的大小的计算 
- 使用new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息
自行计算 - malloc则需要
显式地指出所需内存的尺寸 
  - 使用场景 
- new/delete 适用于C++对象,它们会自动处理对象的构造和析构。
 - malloc/free 更通用,可以在C++中使用,也可以在C中使用,但需要手动管理对象的构造和析构。
 
  
 
UserInfo* user = static_cast<UserInfo*>(malloc(sizeof(UserInfo)));
new (user) UserInfo("Alice", 25);
std::cout << "User's age: " << user->getAge() << std::endl;
user->~UserInfo();
free(user);