C++学习笔记(一)——内存、引用、const

来源:互联网 发布:linux中的uniq 编辑:程序博客网 时间:2024/06/15 15:09

内存管理

  1. 使用new申请内存,使用delete释放内存。
//C++:int *p = new int; delete p;int *arr = new int[100]; //申请块内存delete []arr;//如果写成delete arr,则只能删除第一个内存,后面99个内存还在。//c语言:void *malloc(size_t size); //申请内存void free(void *memblock); //释放内存

申请和释放内存配套,不可混用。
2. 申请内存需要判断是否成功

 int *p = new int;if(NULL == p){//内存分配失败//异常处理}

const常量

使用const比宏定义define好,因为编译时const会检查变量类型,不易出错。
另外:

const int *p;int const *p; //二者等价

下面记录C++Primer中提到的一个问题:
假设给出以下语句:

typedef string *pstring;const pstring cstr;

请问cstr变量是什么类型?
答案是const string类型的指针。
那const pstring指针所表示的真实类型是什么?
const修饰的是pstring,而pstring是一个指针,所以等价为:

string *const cstr; //指向string类型对象的const指针//下面这个等价是错误的const string *cstr;

引用

int a = 3;int &b = a;b = 10; //b是a的别名,改变b相当于改变a
别名和指针的比较
引用和指针都可以间接访问另一个值,但是它们之间有两个重要区别:
  1. 定义引用时必须初始化,而指针初始化不是必要的(但是注意,未初始化的指针不要用于解引用*,即不要对该指针进行存、取值等操作)
  2. 给引用赋值修改的是与该引用关联的对象的值,而不是该引用与另一个对象的关联,引用一旦初始化就始终指向特定的对象。
//指针赋值int ival = 1024,ival2 = 2048;int *pi = &ival, *pi2 = &ival2;pi = pi2; //指针pi指向了ival2//引用赋值int &r1 = ival, &r2 = ival2;r1 = r2; //引用关联的对象没变,ival的值变成了ival2的值
0 0
原创粉丝点击