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