装饰模式

来源:互联网 发布:知乎 樱桃 3000 编辑:程序博客网 时间:2024/06/10 04:10

 

C++写的一个装饰模式,不过觉得还是有点问题。因为这样并不是一步步开始穿起来的。

还有刚开始的时候我忘记了给IPerson定义了虚析构函数。导致内存泄漏,不过加上delete p就可以了。

当IPerson的指针调用析构函数的时候,必须是虚析构函数才行,不然无法得知实际要调用的析构函数。

 

 

之前我忘记为IPerson定义一个虚析构函数,所以在调用析构函数的时候,并不是调用到p真正指向的类型的析构函数,而是调用到编译器为IPerson插入的默认析构函数,这样就导致了我们想要释放的内存并不能真正释放。

 

当一个类在构造对象的时候,构造函数会从最高层(也就是最顶层的父类)开始构造,在析构的时候则相反,也就是从本对象开始进行析构,一直析构到最顶层的父类。然而假如我用的是接口去指向实际的派生类对象的时候,那析构函数怎么工作?最最主要的就是要将最顶层的父类(也可以是从你会开始用的那一层开始)定义成虚函数,这样来的话会编译器会将析构函数加入虚表,这样的话类型就会根据实际类型的析构函数开始析构到顶层。假如不定义成虚析构函数的话会出现什么情况呢?当你DELETE掉该对象的时候,直接就调用接口类型的析构函数去析构了,这样一来肯定是不正确的结果了。

原创粉丝点击