C++学习笔记--new和namespace
来源:互联网 发布:sql server下载安装 编辑:程序博客网 时间:2024/06/05 18:20
内存申请
在C中我们学习了动态内存分配(小知识:一般动态分配回来的内存空间比需要的略大)的函数,为什么我们在C++中还要学习新的内存分配方式?那是因为C中的malloc、calloc、等都不是C中自带的,而是通过库函数调用得到的,对于一些不支持这些库编译器就无法使用。C++中使用new关键字(表面是C++自带的,不取决于编译环境使用)进行动态内存分配,在C中的动态内存分配是基于字节分配的,但是C++中是基于类型来进行动态内存分配的,在使用完后通过delete关键字来释放内存。new有两种方式申请,对单个变量类型申请和对数组申请。
变量申请:type *p = new type;
...
...
delete p;
数组申请:type *p = new type[N];
...
...
delete []p;//区别与单个变量的释放
在进行new分配单个变量类型的内存时可以对申请的空间进行初始化,如;
int *pi = new int(1);
float *pf = new float(2.0f);
char * pc = new char('a');
注意:int *p = new int(2);区别于int *p = new int[2]; //前者是进行初始化,后者却是申请一片连续的空间
Test *pm = new Test();//在堆中创建一个对象。
new与malloc的区别:
1、new关键字是C++的一部分,malloc是由C库提供的函数。
2、new以具体类型为单位进行内存分配,malloc以字节为单位进行内存分配。
3、new在申请单个类型变量时可以进行初始化,malloc不具备初始化的特性。
4、malloc仅仅根据需要申请一定量的内存空间。
5、用new申请一个类对象时会触发调用构造函数,用malloc申请同样大小空间时只是返回这一片内存的首地址。
6、对象的创建只能用new,malloc不适合用于面向对象开发。
7、释放内存时,delete会触发析构函数的调用,使对象彻底被销毁,free仅仅是释放申请回来的内存空间,但是指针本身依然存在。
8、delete和free不能混用,如果用delete释放malloc申请的空间,由于malloc申请的空间并不会生成一个合法的对象,调用析构函数可能引起程序崩溃;如果用free释放new申请的空间可能导致对象未被销毁而导致内存泄漏。
命名空间
C中只有一个全局作用域,所有的全局标识符共享一个作用域,这样就可能导致标识符之间发生冲突,所以C++为了更好的处理这种情况就提出了命名空间的概念,命名空间将全局作用域(全局作用域也叫默认命名空间)分成不同的部分,这样就使不同命名空间部分里的标识符即便重名也不会发生冲突。
int x = 1;//默认作用域里的变量namespace Name1{int i = 0;namespace Name2{......int j = 1;}......int k = 1;}
可以看出命名空间的定义还是比较简单的,并且它还可以嵌套定义。
使用整个命名空间:
using namespace Name1;
i = 3;//先说明再使用
k = 5;
使用命名空间中的变量:
using Name1 :: i; i = 3;//先说明再使用
using Name1 :: Name2 :: j; j = 2;//先说明再使用
Name1 :: i = 4;//直接使用
使用默认命名空间中的变量:
:: x;
- C++学习笔记--new和namespace
- linux & C++Primer 学习笔记--namespace 初访
- namespace学习笔记
- Spring Framework Reference 5.0.2 源码学习记录 使用p-namespace和c-namespace
- 《Effective C++》学习笔记条款16 成对使用new和delete时要采取相同形式
- 【C++】学习小笔记系列-1-new和delete的实际过程。
- 学习C++(operator new 和 operator delete)
- C++学习笔记:New和Delete
- vc++学习笔记new和delete
- golang new和make学习笔记
- C++学习笔记--重载new和delete
- Struts2 学习笔记02 Namespace
- HBase学习笔记 --- namespace操作
- c++ primer plus阅读笔记10---定位new using namespace
- 【Spring学习12】XML简写p-namespace及c-namespace
- object-c学习笔记:new vs alloc init
- object-c学习笔记:new vs alloc init
- object-c学习笔记:new vs alloc init
- 输出100以内所有含7或7的倍数的值
- Delegate(委托)中的Covariance(协变)和Contravariance(逆变)
- #ifndef 和 #program once 的区别
- Objective-C Runtime 运行时之四:Method Swizzling
- 在Linux server版上安装node.js
- C++学习笔记--new和namespace
- REDIS源码解析
- Linux批量操作------mov转MP4
- Robot Framework
- 鼠标放上去图片变大 css
- 如何让您的网站符合W3C标准
- 基于H.265编解码高清视频传输系统
- 面试编程题
- Matlab 程序结束后发送短信或者邮件