用织梦建手机网站,自己做app的软件,上海注册公司多久,深汕特别合作区机关事业单位1、new 关键字 会在堆内申请空间#xff0c;如果仅仅是普通调用构造函数#xff0c;不会在堆内开辟空间。
2、函数调用会形成栈帧#xff0c;进行压栈操作#xff0c;函数调用结束#xff0c;会进行弹栈。
函数内的局部对象#xff0c;会随着弹栈#xff0c;而被销毁(…
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 : a endl; //结果都是20 国内教材大多数理解为引用是一个变量的新名称用来替代数据的旧名。但是在大多数C编译器中引用实际上就是 一个指针常量。 TypeName data; TypeName var_ref data; //引用初始化 TypeName const * var_ptr data //指针常量初始化 var_ref 等同于var_ptr //以下操作是非法的 TypeName data_new; var_ref data_new; var_ptrdata_new; 指针常量的特性就是 可以改变指针指向数据本身的值但是不能修改指针的指向。 #includeiostream
#include string
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: age ---析构 endl; }
};Example testE1() {Example e(33);//局部对象函数结束时出栈对象e被析构return e;
}Example testE2() {Example e(44); //局部对象同样会被析构return e;
}Example testE3(Example e) {e.age 55;return e; //其实这里返回不返回都无所谓 最好写成void返回 因为修改的是外部对象
}Example testE4() {//堆空间创建对象生命周期随程序结束而释放或者可以手动deleteExample *e new Example(66); return *e;
}int main() {Example e;
// etestE1();
// e testE2();
//e testE3(e); //引用必须初始化
Example e_reference testE4(); //不手动析构则不会析构
//此外 注意 引用是不可被修改的本质是一个指针常量 Example const *//e_reference e;错误,引用不能被修改// 这是赋值不是修改此处创建了一个匿名对象age888 此句结束后构造函数弹栈该匿名对象会弹栈
e_reference Example(888) ;cout e.age endl; //9999cout e_reference.age endl; //888delete e_reference; //此时才对 e_reference 进行析构 //析构 ereturn 0;
}