分类: C/C++
2014-11-02 09:27:27
C++中的动态内存分配,c++中通过new关键字进行动态内存申请,c++中的动态内存申请是基于类型进行的,delete关键字用于内存释放
变量申请:type* pointer = new type; // delete pointer;
数组申请:type* pointer = new[] type; // delete[] pointer;
new 关键字与malloc 函数的区别:new关键字是c++的一部分,malloc是由c库提供的函数new以具体类型为单位进行内存分配,malloc只能以字节为单位进行内存分配,new在申请单个类型变量时可进行初始化,malloc不具备内存初始化的特性。
C++中的命名空间
在c中只有一个全局作用域,c中所有全局标识符共享同一个作用域,标识符之间可能发生冲突,c++中提出了命名空间的概念:命名空间将全局作用域分成不同的部分,不同命名空间中的标识符可以同名而不发生冲突,命名空间可以相互嵌套,全局作用域也叫默认命名空间。
C++命名空间的使用:
使用整个命名空间:using namespace name;
使用命名空间中的变量: using name::variable;
使用默认命名空间中的变量: ::variable
默认情况下可以直接使用默认命名空间中的所有标识符。
C方式的强制类型转换存在问题:任意类型之间都可以进行转换,编译器很难判断正确性,在源码中无法快速定位所有使用强制类型转换的语句,在程序设计理论中强制类型转换是不被推荐的,与goto语句一样应该尽量避免。
强制类型转换在实际工程中还是可能使用的:
C++将强制类型转换分为4种不同的类型static_cast\const_cast\dynamic_cast\reinterpret_cast
用法:xxx_cast
Static_cast用于基本类型的转换,但不能用于基本类型指针间的转换,用于有继承关系类对象之间的转换和类指针之间的转换,static_cast是编译期进行转换的,无法再运行时检测类型,所以类型间的转换可能存在风险。
Const_cast 用于去除变量的const属性。
Reinterpret_cast用于指针类型间的强制转换,用于整数和指针类型间的强制转换。
Dynamic_cast主要用于类层次间的转换,还可以用于类之间的交叉转换