c++的动态内存(堆)分配
c语言中依赖库函数malloc进行动态内存分配,而c++中则自带了new/delete关键字
- new/delete最大的特点是以类型为单位分配内存,并且分配单个变量时(数组不行)可进行初始化。唯一要注意的就是整个数组的delete要添加[]
int* p = new int;
delete p;
float* pf = new float(2.0f);//分配单个变量时可进行初始化
delete pf;
p = new int[10];
delete[] p;//尤其注意,整个数组的释放要添加[]
struct mystruct
{
int a;
char b;
}
mystruct *pMySrt=new mystruct;
delete pMySrt;
- new最大的优点是,可以new对象,并自动进行初始化。而malloc就做不到这一点,malloc仅仅能申请到内存而已,并不能赋予其对象的特性。这也是为什么c++要引入new的原因
class Test
{
public:
Test()
{ }
};
Test* pn = new Test;//new一个对象的时候,会自动触发构造函数
Test* pm = (Test*)malloc(sizeof(Test));//malloc仅仅能申请内存,而不能赋予其对象的特性
delete pn;
c++的命名空间
所谓的命名空间,就是为全局变量增加一个标识,用于解决重名问题。全局变量的作用域不会改变
- 其实不同命名空间里的同名变量,本质是两个不同的变量
namespace First
{
int i = 0;
}
namespace Second
{
int i = 1;
namespace Internal
{
struct P
{
int x;
int y;
};
}
}
void func(void)
{
using namespace First; //使用整个命名空间
using Second::Internal::P;