建站网站软件8,电商怎么做如何从零开始,商城网站模板免费,公司注册网站系统new/delete 与 malloc/free 的区别#xff1f;
分配内存的位置 malloc是从堆上动态分配内存new是从自由存储区为对象动态分配内存。自由存储区的位置取决于operator new的实现。自由存储区不仅可以为堆#xff0c;还可以是静态存储区#xff0c;这都看operator new在哪里为…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中使用但需要手动管理对象的构造和析构。
// 使用 malloc 分配内存 并 强制类型转换
UserInfo* user static_castUserInfo*(malloc(sizeof(UserInfo)));// 构造对象
new (user) UserInfo(Alice, 25);// 使用对象指针调用成员函数
std::cout Users age: user-getAge() std::endl;// 手动调用析构函数
user-~UserInfo();// 释放内存
free(user);