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

如何保存自己做的网站手机免费发布信息平台

如何保存自己做的网站,手机免费发布信息平台,保定建站方案,清华紫光做网站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/187376.html

相关文章:

  • 腾讯云可以做网站吗3360网址大全
  • 怎样做企业手机网站建设网站的友情链接是什么意思
  • asp 网站 500北京网站推广营销策划
  • 网站如何为关键词做外链优化网站关键词优化
  • 莱芜网站制作哪家好郑州关键词排名顾问
  • 网站建设专业就业前景最稳定的灰色词排名
  • 工行网站如何做理财风险评估网络优化工作应该怎么做
  • ps手机网站制作网络营销网站推广方法
  • 世界各国b2b网站大全优书网首页
  • 东莞网站推广怎么做百度seo网站
  • 网站可以做软著吗开封seo推广
  • 网站建设排版页面100种宣传方式
  • 网站备案查询 java今天军事新闻最新消息
  • php p2p网站开发整站快速排名优化
  • 怎么知道网站程序是什么做的今日国际新闻头条新闻
  • 芜湖网站建设推广公司长沙seo
  • 宁波网站建设慕枫科技百度联系方式
  • 网店详情页设计白杨seo
  • 陕西专业网站建设价格icp备案查询
  • 对比网页设计网站免费发帖平台
  • inititle 网站建设软件推广怎么赚钱
  • 免费拓客软件排行榜seozhun
  • 最新中国b2b网站排名网络营销的主要传播渠道
  • 搭建一个网站多少钱seo怎么读
  • 云主机iss怎么做网站app下载注册推广平台
  • APP客户端网站建设推广项目的平台
  • 郴州是几线城市搜索引擎优化的概念是什么
  • 网站建设学习网站网络广告策划流程有哪些?
  • 动态网站难不难做电子商务网站建设多少钱
  • 乐清网站开发公司关键词优化哪家好