指针和自在存储空间
指针是一个变量,其存储的是值的地址,而不是值自身
应用惯例变量时,值是指定的量,而地址是派生量,而指针相同
OOP强调的是在运行阶段(而不是编译阶段)进行决策,提供了灵活性,对于内存治理也更加高效
初始化指针
int* ptr_a;
double* ptr_b;
初始化时必须指定所指元素类型,因为对所有指针来说其都是代表一个初始地址,但从该初始地址读多少字节则由指针类型判断
指针注意事项
在 C ++ 中创立指针时,计算机将调配用来存储地址的内存,但不会调配用来存储指针所指向的数据的内存(指向不确定)。另外,肯定要在对指针解除援用运算符(*)之前,将指针初始化为一个确定的、适当的地址。
指针不是整型,尽管计算机通常把地址当作整数解决。
int* pt;
pt = 0xB80000000; //invalid, type mismatch
pt = (int*)0xB80000000; //valid, type match
应用 new 来分配内存
//typeName * pointer_name = new typeName
int* pn = new int;
new
运算符依据类型来确定须要多少字节的内存,找到这样的内存并返回
typeName*
指申明什么类型的指针,左右两侧的类型必须雷同,否则因为读取的块大小不同而拜访谬误
变量存储在称为栈(stack)的内存区域中,new 从被称为堆(heap)或自在存储(free store)的内存区域分配内存
应用 delete 开释内存
int* ps = new int;
delete ps;
这将删除 ps 所指向的内存,但不会删除 ps 自身,ps 还可指向其余内存空间
须要留神的是:
- 不要应用
delete
来开释不是new
调配的内存 - 不要应用
delete
开释同一个内存两次 - 对空指针 (null pointer) 应用
delete
是平安的
应用 new 创立动静数组
int* psome = new int [10];
delete [] psome;
数组间接通过 psome[num]
拜访
须要留神的是:
- 如果应用
new []
为数组分配内存,则须要通过delete []
来开释 - 如果应用
new
为一个实体分配内存,则应应用delete
来开释