-
<李>通过新关键字进行动态内存申请李>
<李> c++中的动态内存申请时基于类型进行的李>
<李>删除关键用于内存释放
李>
C语言其实是不支持动态内存分配的,是通过malloc库函数来实现的,可能有一些硬件根本不支持malloc;而新的c++是一个关键字,不管在任意编译器上,任意硬件平台上都是能够进行动态内存分配的,这是本质区别。
malloc是基于字节来进行动态内存分配的,新则是基于类型来进行动态内存分配
//变量申请: *指针类型=新类型;//从堆空间获取一个新类型的类型的空间//使用和C语言一样 删除指针;//这里指的是指针所指向的那个元素的内存空间被释放//数组申请: *指针类型=新型[N];//N指数组大小,数组元素个数,并非字节数//删除[]指针;//数组的释放,需要在删除后面加[],和变量有区别//删除[]说明所要释放的指针是指向一片数组空间的,释放整个数组空间,如果用删除的话,指针指向的是数组的首元素地址,释放的就是首元素的内存空间,其余元素的内存空间并没有释放,会造成内存泄漏 >之前# include & lt; stdio.h> int main () { int * p=new int; * p=5; * p=* p + 10; printf (" p=% p \ n ", p); printf (" * p=% d \ n ", * p); 删除p;//指释放单个变量 p=new int [10];//p指向一片数组空间,//p所指向的内存空间,至少占用了40个字节,保证够用,可能分配得更多 for (int i=0;i<10;我+ +) { 我[我]=+ 1; printf (" p [% d]=% d \ n ", i, p[我]); } 删除[]p;//释放数组 返回0; } >之前新关键字与malloc函数的区别:
-
<李>新关键字是c++的一部分李>
<李> malloc是由C库提供的函数李>
<李>新以具体的类型为单位进行内存分配李>
<李> malloc以字节为单位进行内存分配李>
<李>新在申请单个类型变量时可以进行初始化李>
<李> malloc不具备内存初始化的特性李>
新关键字的初始化:
int *π=new int (1); 浮* pf=新的浮动(2.0度); char *电脑=new char (c) l
在C语言中只有一个全局作用域
-
<李> C语言所有的全局标识符共享同一个作用域李>
<李>标识符之间可能发生冲突李>
c++中提出了命名空间的概念
-
<李>命名空间将全局作用域分成不同的部分李>
<李>不同命名空间中的标识符可以同名而不会发生冲突李>
<李>命名空间可以相互嵌套李>
<李>全局作用域也叫默认命名空间李>
定义:
名称空间的名字 { 名称空间内部 {/*……*/}/*……*/} >之前命名空间的使用
使用命名空间名称;//使用整个命名空间 变量使用名称::;//使用命名空间中的变量 变量::;//使用默认命名空间中的变量# include & lt; stdio.h> 名称空间的第一 { int i=0; } 名称空间第二 { int i=1; 名称空间内部 { struct P { int x; int y; }; } } int main () { 使用名称空间; 内部使用第二::::P; printf("::我=% d \ n ", 1); printf(“第二::i=% d \ n”,第二::我); P P={2,3}; printf (" p。x=% d \ n”, p.x); printf (" p。y=% d \ n”, p.y); 返回0; }命名空间解决了全局变量命名冲突的问题
c++中内置了动态内存分配的专用关键字
c++中的动态内存分配可以同时进行初始化
c++中的动态内存分配时基于类型进行的
c++中命名空间概念用于解决名称冲突问题
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
详解c++动态内存分配与命名空间