C++中的动态内存分配

C语言是通过库函数来完成动态内存分配的,而C++是通过关键字从语言层面支持的。

C语言中的malloc是基于字节来进行内存申请的,C++中是基于类型来进行的。

delete加上[]代表释放数组,如果不加的话只会释放第一个元素的内存空间。

示例程序如下:

 #include <stdio.h>

 int main()
{
int* p = new int; *p = ;
*p = *p + ; printf("p = %p\n", p);
printf("*p = %d\n", *p); delete p; p = new int[]; for(int i=; i<; i++)
{
p[i] = i + ; printf("p[%d] = %d\n", i, p[i]);
} delete[] p; return ;
}

运行结果如下:

new和delete在使用体验上比malloc和free好,malloc和new的区别如下:

new关键字的初始化:

示例程序如下:

 #include <stdio.h>

 int main()
{
int* pi = new int();
// int* pa = new int[1]; float* pf = new float(2.0f);
char* pc = new char('c'); printf("*pi = %d\n", *pi);
printf("*pf = %f\n", *pf);
printf("*pc = %c\n", *pc); delete pi;
delete pf;
delete pc; return ;
}

运行结果如下:

new int(1)和new int[1]是不同的,一个是申请内存并初始化,一个是申请有一个元素的数组。

C++中的命名空间:

C++中命名空间的定义:

C++命名空间的使用:

示例程序:

 #include <stdio.h>

 namespace First
{
int i = ;
} namespace Second
{
int i = ; namespace Internal
{
struct P
{
int x;
int y;
};
}
} int main()
{
using namespace First;
using Second::Internal::P; printf("First::i = %d\n", i);
printf("Second::i = %d\n", Second::i); P p = {, }; printf("p.x = %d\n", p.x);
printf("p.y = %d\n", p.y); return ;
}

运行结果如下:

小结:

  C++中内置了动态内存分配的专用关键字

  C++中的动态内存分配可以同时进行初始化

  C++中的动态内存分配是基于类型进行的

  C++中命名空间概念用于解决名称冲突问题

最新文章

  1. 《JS设计模式笔记》 5,适配器模式
  2. oracle数据库从入门到精通之二
  3. ClassLoader 详解及用途
  4. CentOS只允许部分IP登陆ssh |ssh 允许指定IP
  5. (AS3)关于arguments
  6. Careercup 论坛上较有意思的题目整理
  7. kafka技术要点
  8. STM32F0xx_PWR低功耗配置详细过程
  9. JS鼠标滚动事件
  10. 动态链接--so的搜索过程
  11. jquery datatable隐藏字段获取
  12. DEDECMS 获取当前栏目及所有子栏目的文章数量
  13. java中的==、equals()、hashCode()源码分析
  14. Your local changes to the following files would be overwritten by merge:
  15. java多线程——监视锁(monitor)(转)
  16. php 统计一维数组中重复的元素个数
  17. Linux命令应用大词典-第28章 硬件管理
  18. how to solve &quot;[WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. build is platform dependent!&quot;
  19. spring3: Bean的命名与Bean的实例化
  20. (一)初识div+css

热门文章

  1. 通过CFX发布WebService(一)
  2. 20155334 2016-2017-2 《Java程序设计》第七周学习总结
  3. Flask添加翻页功能(非sqlalchemy)
  4. RedHot 不能联网 ifconfig命令只显示lo 不显示eth0的解决方法!
  5. 详细了解下PHP的curl函数及常用之处
  6. vue.js指令v-model实现方法
  7. 20145118 《Java程序设计》第1周学习总结
  8. 如何线程安全的使用HashMap
  9. linux下强制退出指定用户开启的伪终端
  10. 【Java----判断字符串是否乱码】