当前位置: 首页 > wzjs >正文

郑州做网站茂睿科技博客营销案例

郑州做网站茂睿科技,博客营销案例,做网站教程pdf,百度域名服务器C 中 new/delete 与 malloc/free 完全详解 一、new/delete 与 malloc/free 的区别 特性new/deletemalloc/free属于C语言C语言申请的内存区堆(Heap)堆(Heap)返回类型指向对象类型的指针(自动转换)void*&…

C++ 中 new/deletemalloc/free 完全详解


一、new/deletemalloc/free 的区别

特性new/deletemalloc/free
属于C++语言C语言
申请的内存区堆(Heap)堆(Heap)
返回类型指向对象类型的指针(自动转换)void*,需手动强制转换类型
是否调用构造函数是(调用构造函数)否(只分配内存,不调用构造函数)
是否调用析构函数是(调用析构函数)
申请失败抛出异常(std::bad_alloc返回 NULL

二、详细解释

1. malloc/free(C语言风格)

  • malloc(size_t size):申请一块连续的内存区域,大小为 size 字节。
  • 返回 void*,需要强制类型转换成需要的指针类型。
  • 不会调用对象的构造函数,只是单纯分配内存。
  • free(void* ptr):释放由 malloc 分配的内存,不调用析构函数。

使用场景:

  • 兼容 C 的项目
  • 只需要原始内存、不需要对象初始化时

2. new/delete(C++风格)

  • new Type(args):分配内存 + 调用构造函数。
  • delete ptr:调用析构函数 + 释放内存。
  • 可以分配单个对象,也可以分配数组对象(new Type[n])。

使用场景:

  • 需要构造和析构管理的 C++ 对象
  • 更安全、更易用,符合 C++ RAII 风格

三、常见使用示例

1. malloc/free 示例

#include <cstdlib>  // for malloc/free
#include <iostream>struct MyStruct {int x;float y;
};int main() {// malloc 分配内存MyStruct* p = (MyStruct*)malloc(sizeof(MyStruct));if (p == nullptr) {std::cerr << "Memory allocation failed!" << std::endl;return 1;}// 手动初始化p->x = 10;p->y = 3.14f;std::cout << "x = " << p->x << ", y = " << p->y << std::endl;// free 释放内存free(p);return 0;
}

2. new/delete 示例

#include <iostream>struct MyStruct {int x;float y;// 构造函数MyStruct(int a, float b) : x(a), y(b) {std::cout << "Constructor called!" << std::endl;}// 析构函数~MyStruct() {std::cout << "Destructor called!" << std::endl;}
};int main() {// new 分配并调用构造函数MyStruct* p = new MyStruct(10, 3.14f);std::cout << "x = " << p->x << ", y = " << p->y << std::endl;// delete 调用析构函数并释放delete p;return 0;
}

3. new/delete[](数组版本)

#include <iostream>int main() {// 分配一个数组int* arr = new int[5];for (int i = 0; i < 5; ++i)arr[i] = i * 10;for (int i = 0; i < 5; ++i)std::cout << arr[i] << " ";std::cout << std::endl;// 必须使用 delete[] !!!delete[] arr;return 0;
}

四、注意事项总结(超级重要)

项目说明
1newdelete 要成对使用
2new[]delete[] 要成对使用不是 delete!!!
3不要混用 mallocdelete,或 newfree严重错误!
4避免内存泄漏:申请的内存必须释放,否则内存泄漏
5申请后立即检查返回值malloc 返回 NULL,new 可以捕捉异常
6构造/析构问题malloc 不负责对象构造,new
7自定义 new/delete:可以通过重载 operator new / operator delete 控制内存分配策略(如内存池优化)
8异常安全:尽量使用智能指针(如 std::unique_ptrstd::shared_ptr)避免手动管理内存错误

五、常见错误示例

// 错误示例1:malloc分配,用delete释放
int* p = (int*)malloc(sizeof(int));
delete p;  // ❌ 错,应使用 free(p);// 错误示例2:new分配,用free释放
int* q = new int(5);
free(q);  // ❌ 错,应使用 delete q;// 错误示例3:new[]配delete
int* arr = new int[10];
delete arr;  // ❌ 错,应使用 delete[] arr;

小结

malloc/freenew/delete
只分配/释放内存,不调用构造析构函数分配内存并调用构造/析构函数
返回 void*返回对应类型的指针
C 风格C++ 风格
适合简单内存申请(不需要对象管理)适合对象创建与销毁(有构造析构过程)
http://www.dtcms.com/wzjs/484395.html

相关文章:

  • 高密做网站哪家好代理西安seo培训机构
  • 怎么做高保真网站郑州官网网站优化公司
  • 如何做购物网站的限购功能代码seo免费浏览网站
  • 菏泽网站建设fuyucom专业网站推广优化
  • 聊城建网站哪家好哪家网络营销好
  • 网站的c4d动画是怎么做的站长网
  • 如何做网站新手引导seo优化网站优化
  • 咸阳做网站的深圳网络推广seo软件
  • 网站单页做3010元做游戏代理
  • 网页设计作品分析优化建站seo门户
  • 新手学做网站视频银川网页设计公司
  • 网上做环评立项的网站是哪个网络舆情分析
  • 南京大型门户网站建设网站设计报价方案
  • 如何把代码放在网站首页教程全球疫情今天最新消息
  • 任何查询网站有没有做404怎样在百度上免费做广告
  • 安米网在线app制作百度seo优化方法
  • 做网站大概费用百度商业平台
  • 有关电子商务网站建设与维护的书籍seo推广优化平台
  • 一个网店转让可以卖多少钱优化 seo
  • 广西学校网站建设体验营销案例分析
  • wordpress 国产评论插件什么是seo站内优化
  • 深圳网站建设哪家强百度订单售后电话
  • 网站升级中 模版java培训机构十强
  • b站视频播放量网站凡科建站怎么建网站
  • 厦门市建设区网站首页最新疫情消息
  • 做网站怎么导入源码百青藤广告联盟
  • 网站设计合同模板计算机培训短期速成班
  • 成都科技网站建设网址导航哪个好
  • 手机培训网站建设营销型企业网站推广的方法有哪些
  • 网站如何做银联在线支付软文代写新闻稿