面向对象编程(二) 引用

引用的其他用法

引用作为成员变量

函数返回引用,可以将返回值做左值

拷贝构造

通过类的其他对象初始化当前对象(有默认拷贝构造方法,成员对成员的拷贝,可能发生对象的嵌套拷贝)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//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先分配内存后调用构造函数

1
2
3
4
5
6
//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先调用析构函数后释放内存

1
2
3
4
//delete pc
//for complier, it transform to follow be like
Complex::~Complex(pc); //call dtor
operator delete(pc); //call free(pc) to release memory
作者

Martin

发布于

2023-05-26

更新于

2023-05-26

许可协议

You need to set install_url to use ShareThis. Please set it in _config.yml.
You forgot to set the business or currency_code for Paypal. Please set it in _config.yml.

评论

You forgot to set the shortname for Disqus. Please set it in _config.yml.

You need to set client_id and slot_id to show this AD unit. Please set it in _config.yml.