mirror of
https://github.com/huihut/interview.git
synced 2024-03-22 13:10:48 +08:00
添加指针指针、虚函数、纯虚函数、虚函数指针、虚函数表
This commit is contained in:
parent
717d5764e0
commit
a70cd27f93
42
README.md
42
README.md
|
@ -517,6 +517,22 @@ virtual int A() = 0;
|
|||
Data vall = { 0, "Anna" };
|
||||
```
|
||||
|
||||
### 虚函数、纯虚函数
|
||||
|
||||
[CSDN . C++中的虚函数、纯虚函数区别和联系](https://blog.csdn.net/u012260238/article/details/53610462)
|
||||
|
||||
* 类里如果声明了虚函数,这个函数是实现的,哪怕是空实现,它的作用就是为了能让这个函数在它的子类里面可以被覆盖,这样的话,这样编译器就可以使用后期绑定来达到多态了。纯虚函数只是一个接口,是个函数的声明而已,它要留到子类里去实现。
|
||||
* 虚函数在子类里面也可以不重载的;但纯虚函数必须在子类去实现。
|
||||
* 虚函数的类用于“实作继承”,继承接口的同时也继承了父类的实现。当然大家也可以完成自己的实现。纯虚函数关注的是接口的统一性,实现由子类完成。
|
||||
* 带纯虚函数的类叫虚基类,这种基类不能直接生成对象,而只有被继承,并重写其虚函数后,才能使用。这样的类也叫抽象类。抽象类和大家口头常说的虚基类还是有区别的,在C#中用abstract定义抽象类,而在C++中有抽象类的概念,但是没有这个关键字。抽象类被继承后,子类可以继续是抽象类,也可以是普通类,而虚基类,是含有纯虚函数的类,它如果被继承,那么子类就必须实现虚基类里面的所有纯虚函数,其子类不能是抽象类。
|
||||
|
||||
|
||||
### 虚函数指针、虚函数表
|
||||
|
||||
* 虚函数指针:在含有虚函数类的对象中,指向虚函数表
|
||||
* 虚函数表:在程序只读数据段(.rodate section),存放虚函数指针,如果派生类实现了基类的某个虚函数,则在虚表中覆盖原本基类的那个虚函数指针
|
||||
|
||||
|
||||
### 虚继承、虚函数
|
||||
|
||||
#### 虚继承
|
||||
|
@ -587,19 +603,39 @@ int main()
|
|||
|
||||
头文件:`#include <memory>`
|
||||
|
||||
##### C++98
|
||||
#### C++98
|
||||
|
||||
```cpp
|
||||
std::auto_ptr<std::string> ps (new std::string(str));
|
||||
```
|
||||
|
||||
##### C++11
|
||||
#### C++11
|
||||
|
||||
1. shared_ptr
|
||||
2. unique_ptr
|
||||
3. weak_ptr
|
||||
4. auto_ptr
|
||||
4. auto_ptr(被c++11弃用)
|
||||
|
||||
* Class shared_ptr 实现共享式拥有(shared ownership)概念。多个智能指针指向相同对象,该对象和其相关资源会在“最后一个reference被销毁”时被释放。为了在结构较复杂的情景中执行上述工作,标准库提供weak_ptr、bad_weak_ptr和enable_shared_from_this等辅助类。
|
||||
* Class unique_ptr 实现独占式拥有(exclusive ownership)或严格拥有(strict ownership)概念,保证同一时间内只有一个智能指针可以指向该对象。你可以移交拥有权。它对于避免内存泄漏(resource leak)——如new后忘记delete——特别有用。
|
||||
|
||||
##### shared_ptr
|
||||
|
||||
多个智能指针可以共享同一个对象,对象的最末一个拥有着有责任销毁对象,并清理与该对象相关的所有资源。
|
||||
|
||||
##### weak_ptr
|
||||
|
||||
weak_ptr 允许你共享但不拥有某对象,一旦最末一个拥有该对象的智能指针失去了所有权,任何weak_ptr都会自动成空(empty)。因此,在default和copy构造函数之外,weak_ptr只提供“接受一个shared_ptr”的构造函数。
|
||||
|
||||
##### unique_ptr
|
||||
|
||||
unique_ptr 是C++11才开始提供的类型,是一种在异常是可以帮助避免资源泄漏的智能指针。采用独占式拥有,意味着可以确保一个对象和其相应的资源同一时间只被一个pointer拥有。一旦拥有着被销毁或编程empty,或开始拥有另一个对象,先前拥有的那个对象就会被销毁,其任何相应资源亦会被释放。
|
||||
|
||||
unique_ptr用于取代auto_ptr
|
||||
|
||||
##### auto_ptr
|
||||
|
||||
被c++11弃用,原因是缺乏语言特性如“针对构造和赋值”的std::move语义,以及其他瑕疵。
|
||||
|
||||
### 强制类型转换运算符
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user