C++编程剖析 问题 方案 和设计准则,设计模式之——bridge模式
1、Set的每个对象为什么会有三个指针?
STL中的set使用方法详细!!!! 因为其底层是红黑树实现的,每个节点有两个子节点和一个父节点,所以需要三个指针。
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。Set 与 map的区别是什么?
总的来说,这四类容器仅仅只是在RBTree上进行了一层封装,首先,set和map的区别就在于键和值是否相同,set中将值作为键,支持STL的提供的一些交集、并集和差集等运算;map的键和值不同,每个键都有自己的值,键不能重复,但是值可以重复。
multimap和multiset就在map和set的基础上,使他们的键可以重复,除此之外基本等同。
---------------------
作者:zy20150613
来源:CSDN
原文:https://blog.csdn.net/zy20150613/article/details/78693579
版权声明:本文为博主原创文章,转载请附上博文链接!
2、非虚接口做为对外的接口,私有的虚函数作为子类不同的实现, 非虚接口函数当中只要简单的做一层转发而已。
a) 不会带来效率的损失,因为内联函数编译器会优化;
b) 唯一的弊端就是你多写了一行代码。
3、三类隔离接口和实现的方式: Bridge模式(Gamma95); Pimpl惯用法(控制编译期依赖和异常安全保证); handle/Body 或者envelope/letter(coplien92);
设计模式之——bridge模式 在不改变原有接口的基础上扩展新的功能;
4、构造函数为什么不能是纯虚的?
文章有解答:https://blog.csdn.net/shilikun841122/article/details/79012779
5、二义性和可访问性是控制子类代码行为的主要方式?
6、new的几种方式:
带异常的new,:会抛出一个bad_alloc的异常, 在栈解开的过程当中至少会销毁一部分对象从而令它们持有的资源得到释放;
place的new: 在指定的内存构造一个对象:
non exceptionThrow的new; 如果内存无法分配,就返回一个空指针,不抛出任何异常。
new的判空一般情况下无作用,因为一般操作系统都是先预留内存,在使用的时候才会commit,从而暴露异常;但是此时暴露异常已经不是问题的第一现场了,对问题的解决没有太大的帮助。
