【C++】 局部对象,引用返回

1、new 关键字 会在堆内申请空间,如果仅仅是普通调用构造函数,不会在堆内开辟空间。

2、函数调用会形成栈帧,进行压栈操作,函数调用结束,会进行弹栈。

函数内的局部对象,会随着弹栈,而被销毁(析构)。

所以,不要返回局部变量的地址,没有意义,这块地址内的数据已经随着函数结束而回收,该指针指向栈区的未知空间。

3、new 会调用构造函数,malloc不会

4、引用类型使用时一定要进行初始化,不可以修改引用的指向,但是可以通过引用修改引用指向数据的值。

int a = 10;
int b = 20;
int& a_r = a;  //引用使用前要被初始化

a_r = b;  //这是赋值操作,不是更改引用 把a的值改变了

错误:
&a_r = b; //这才是修改引用

cout <<"a_r: " << a_r <<"  a :" <

国内教材大多数理解为,引用是一个变量的新名称,用来替代数据的旧名。但是在大多数C++编译器中,引用实际上就是 一个指针常量

TypeName data; 

TypeName & var_ref =  data;  //引用初始化

TypeName const * var_ptr  =& data, //指针常量初始化

var_ref 等同于var_ptr

//以下操作是非法的

TypeName =data_new;

&var_ref= data_new;

var_ptr=&data_new;

指针常量的特性就是 可以改变指针指向数据本身的值,但是不能修改指针的指向。

#include
#include 
using namespace std;



class Example {

public:
	int age;
	Example(int age) :age(age){
		 cout << "Example 有参构造" << endl; 
	}
	Example():age(9999) { cout << "Example 无参构造函数调用" << endl; }
	~Example() { 
		
		cout <<"age: "<

【C++】 局部对象,引用返回_第1张图片

你可能感兴趣的:(C/CPP,c++)