[CC++] 引用 及 newdelete

[CC++] 引用 及 newdelete,第1张

引用

C中变量没有引用的概念, 通常是使用指针进行编程. C++引入了引用, 而鼓励少用指针.
举例说明

int varA = 233;
int& varB = varA;
int *p = &varA;

紧跟在类型声明后的&符号表示引用变量, 上例中varB即为varA变量的引用, 对比第三行int *p = &varA;这里的&则表示取变量varA的地址.

引用不属于独立的数据类型, 必须依赖于一个变量而存在.
并且只有声明, 没有定义, 在声明时就完成初始化. 如果作为函数形参, 则不需要初始化.
比如

void swap(int& a, int& b);

注意事项:
(1 引用变量不能同时引用多个

int var1 = 2, var2 = 3;
int& varq = var1; // pass
int& varq = var2; // error

(2 不支持声明引用数组(注意不是不能引用数组, C++新标准支持, 而是不能声明存放引用的数组

int vararr[10] = { 0 };
int& varqrr[10] = vararr; // error
int& varq = vararr[0]; // pass

(3 支持引用套娃 (C++新标准
可以声明引用的引用, 还可以声明引用的指针

int varA = 233;
int& varB = varA;
int& varC = varB;
int *p = &varC;

指针和引用的联系:
可以将引用当作常量指针(又不完全是, 因为不需要解引用), 只能指向声明时初始化的赋值对象/传入的函数实参.

理清引用的概念, 就可以来看看new和delete的动态内存分配机制

new

C++中new *** 作符和C中malloc函数类似, 申请动态内存空间, 并且不会自动释放 (所以C++程序里会出现类似C中的悬空指针, 导致产生相应的漏洞
new得到的内存空间会以地址形式返回
举例说明

int *Ip = new int(2); // int var
float *Fp = new float(2.33); // float var
double *Arrp = new double[10]; // double array
delete

C++中的delete相当于C中的free函数, 用来主动释放申请的动态内存.
承接上面的变量声明, 相应的delete为

delete Ip;
delete Fp;
delete[] Arrp; // delete array

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/564177.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-03
下一篇 2022-04-03

发表评论

登录后才能评论

评论列表(0条)

保存