C++面向对象(二)引用
目录
第五章 面向对象编程(二)
引用的其他用法
引用作为成员变量
函数返回引用,可以将返回值做左值
拷贝构造
通过类的其他对象初始化当前对象(有默认拷贝构造方法,成员对成员的拷贝,可能发生对象的嵌套拷贝)
//During call by value
void roster(Person){};
Person child("Ruby");
roster(child); // call copy ctors
// During initialization, call copy ctor
Person baby_a("Fred");
Person baby_b = baby_a;
Person baby_c(baby_a); // same as above
//During function return
Person captain(){
Person player("George");
return player;
}T::T(const T&)
建议每个类提供默认构造函数,拷贝构造函数,虚函数
其他
private针对类而非对象,可访问另一对象中的private成员
内存分配
栈
定义:存在于某作用域的一块内存空间,在函数本体内声明的任何变量,其使用的内存都取自于栈。在作用域结束后自动清理
堆
定义:操作系统提供的一块全局内存空间,程序可动态分配从中获得若干区块。其生命在做犹豫结束后仍然存在,直到整个程序结束
包含:
- static local objects
- global objects
- heap objects(new)
new和delete
new先分配内存后调用构造函数
//Complex* pc = new Complex(1,2);
//for complier, it transform to follow be like
Complex *pc;
void *mem = operator new(sizeof(Complex));//call malloc to allocate memory
pc = static_cast<Complex *>(mem); //cast
pc->Complex::Complex(1,2); //call ctor
delete先调用析构函数后释放内存
//delete pc
//for complier, it transform to follow be like
Complex::~Complex(pc); //call dtor
operator delete(pc); //call free(pc) to release memory