有了malloc/free 为什么还要new/delete ?
有了malloc/free 为什么还要new/delete ?
malloc 与 free 是 C++/C 语言的标准库函数,new/delete 是 C++的运算符。它们都可 用于申请动态内存和释放内存。 对于非内部数据类型的对象而言,光用 maloc/free 无法满足动态对象的要求。
对象 在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。
由于 malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数 和析构函数的任务强加于 malloc/free。
因此 C++语言需要一个能完成动态内存分配和初始化工作的运算符 new,以及一个 能完成清理与释放内存工作的运算符 delete。注意 new/delete 不是库函数。
#include <iostream>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int main(int argc, char** argv) {
//声明字符数组和变量
char str[];
int i;
//从键盘上输入字符串
cout<<"str=";
cin>>str;
cout<<str<<endl;
//按数组和下标变量两种方式显示字符数组
cout<<str<<endl;
for (i=;i<;i++)
cout<<str[i];
cout<<endl;
//字符串反向输出
for (i=;i>=;i--)
cout<<str[i];
cout<<endl;
//将字符数组变成大写字母后输出
for (i=;i<=;i++)
str[i]-=; //小写字母转换成大写字母
cout<<str<<endl; //显示字符串
return ;
}
有了malloc/free 为什么还要new/delete ?的更多相关文章
- 有了malloc/free为什么还要new/delete ?
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符.它们都可用于申请动态内存和释放内存. 对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的 ...
- [转载]有了 malloc/free 为什么还要 new/delete ?
malloc 与free 是C++/C 语言的标准库函数,new/delete 是C++的运算符.他们都可以用于申请动态内存和释放内存. 对于非内部数据类型的对象(如类对象)而言,光用m ...
- 高质量程序设计指南C/C++语言——有了malloc/free为什么还要new/delete?
- malloc 和new , free 和delete的区别
#include <iostream>using namespace std;class user{ public: int age; int number; void test() { ...
- C/C++语言的标准库函数malloc/free与运算符new/delete的区别
概括地说 1.malloc与free是C++/C的标准库函数,new/delete是C++的运算符,它们都可用于申请动态内存和释放内存. 2.对于非内部数据类型的对象而言,只用malloc/free无 ...
- new和malloc区别,delete和delete []区别
面试被问到上述问题,所以特地总结一下: 一.new和malloc的区别. 1.new可以返回指定类型的指针,并且自动分配内存大小:malloc需要计算手动计算分配空间的大小,并且返回值需要强转为实际类 ...
- c++ 浅拷贝和深拷贝 指针和引用的区别 malloc(free)和new(delete)的区别 重载重写重定义
4.malloc(free)和new(delete)的区别 malloc()函数: 1.1 malloc的全称是memory allocation,中文叫动态内存分配. 原型:extern void ...
- malloc 函数工作机制(转)
malloc()工作机制 malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表.调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块.然后,将 ...
- malloc和free的区别
1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符.它们都可用于申请动态内存和释放内存. 2,对于非内部数据类型的对象而言,光用maloc/free无法满足动 ...
随机推荐
- Spring注解运行时抛出null
关于Spring的注解其实不难,大致需要以下几个流程: 一.配置Spring的注解支持 <?xml version="1.0" encoding="UTF-8&qu ...
- redis投票计数
<?php /** * * 缓存利用测试,这里我们获取传过来的投票数据,每次加1,如果增加到了设定值,才将投票 * 次数写回mysql,这大大减轻了与mysql链接的开销,redis的使用由此可 ...
- 创建者模式Builder
创建者模式: 分离对象子组件的单独构造(由Builder来负责)和装配(由Director负责),对象的构造比较复杂时使用 该模式. 类图: Builder 抽象建造者接口,规范各个组成部分的构建. ...
- ubuntu下gcc-avr安装
ubuntu下研究arduino时发现,原来可以不用arduino IDE开发,linux下还有gcc-avr直接开发avr系列的控制器. 于是,迫不及待的查看了下相关资料,总结一下安装gcc-avr ...
- ny12 喷水装置(二)
喷水装置(二) 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 有一块草坪,横向长w,纵向长为h,在它的橫向中心线上不同位置处装有n(n<=10000)个点状的 ...
- 一:cocos2dx 3.2 尚不支持cubeMap?二:光照需要shader实现
一: cocos2dx 3.2 尚不支持cubeMap? 因为需要调用cocos2dx 封装的bindTexture的方法,发现只能绑定2DTexture,对Cube_Map无能无力.顿感累觉不爱…… ...
- [转]C#通过Http发送Soap请求
/// <summary> /// 发送SOAP请求,并返回响应xml /// </summary> /// <param na ...
- 简单的Ajax实例
由于刚刚接触Ajax,所以在网上搜了一下如何实现简单的Ajax,在此写下来,也方便自己以后学习 什么是Ajax? 通过在后台与服务器进行少量的数据交换,Ajax可以使网页实现异步更新,这意味着可以在不 ...
- C++面向对象程序设计的一些知识点(5)
摘要:运算符能给程序员提供一种书写数学公式的感觉,本质上运算符也是一种函数,因此有类内部运算符和全局运算符之分,通过重载,运算符的“动作”更加有针对性,编写代码更像写英文文章. 1.C++标准允许将运 ...
- 配置Tomcat的server.xml以适应web-content文件系统的位置改变
刚才把写的一对jsp.html文件夹改变了位置,然后测试的时候出现了404 后来思考,应该去重新配置tomcat的server.xml文件,修改虚拟路径对应的文件系统路径,修改为当前对应的文件系统路径 ...