装饰模式
来源:互联网 发布:知乎 樱桃 3000 编辑:程序博客网 时间:2024/06/10 11:15
C++写的一个装饰模式,不过觉得还是有点问题。因为这样并不是一步步开始穿起来的。
还有刚开始的时候我忘记了给IPerson定义了虚析构函数。导致内存泄漏,不过加上delete p就可以了。
当IPerson的指针调用析构函数的时候,必须是虚析构函数才行,不然无法得知实际要调用的析构函数。
之前我忘记为IPerson定义一个虚析构函数,所以在调用析构函数的时候,并不是调用到p真正指向的类型的析构函数,而是调用到编译器为IPerson插入的默认析构函数,这样就导致了我们想要释放的内存并不能真正释放。
当一个类在构造对象的时候,构造函数会从最高层(也就是最顶层的父类)开始构造,在析构的时候则相反,也就是从本对象开始进行析构,一直析构到最顶层的父类。然而假如我用的是接口去指向实际的派生类对象的时候,那析构函数怎么工作?最最主要的就是要将最顶层的父类(也可以是从你会开始用的那一层开始)定义成虚函数,这样来的话会编译器会将析构函数加入虚表,这样的话类型就会根据实际类型的析构函数开始析构到顶层。假如不定义成虚析构函数的话会出现什么情况呢?当你DELETE掉该对象的时候,直接就调用接口类型的析构函数去析构了,这样一来肯定是不正确的结果了。
- 装饰模式-撤销装饰
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 装饰模式
- 代理模式(Proxy)
- C# Access 删除数据
- 报错[dbnetlib][connection open]sql server不存在或拒绝访问
- UCWEB是桌面应用,不是浏览器?
- C# Access 添加数据
- 装饰模式
- lucene 3.02用RAMDirectory为存储目录的写入过程
- Zend Framework 中的 Php 编码标准 (一) - 文件格式
- powerdesign实用技巧
- HashMap 负载因子
- Zend Framework 中的 Php 编码标准 (二) - 命名约定
- Zend Framework 中的 Php 编码标准 (三) - 编码风格
- Zend Framework 中的 Php 编码标准 (四) - 内嵌文档
- Zend Framework 中的 Php 编码标准 (五) - 错误与异常