一些重要概念
- 异常安全 出现异常的情况下仍然能够正常运行,出现异常的情况下资源仍然能够被正确的释放,数据始终处于一致的状态
- 异常中立 将所有的异常都转发给调用者
良好的编程习惯
- 尽可能在成员初始值列表中对数据成员进行初始化
- 永远不要让析构函数抛出异常
- 异常安全性规则 在每个函数中,我们要将所有可能会抛出异常的代码单独放在一起,并且对这些代码进行安全处理,然后才能使用不会抛出异常的操作来修改和清理程序的状态
- 我们应该优先考虑内聚性,努力使每段代码都只有单一的明确的功能
为什么pop操作返回值为空
如果pop像下面这样声明
template<typename T> T Stack<T>::pop(){}
假定这个函数本身是异常安全和中立的,我们考虑如下的调用代码
sometype t1(t.pop())
sometype t2;
t2 = t.pop(); //拷贝失败发生异常,由pop弹出的对象将永远丢失
所以为了解决这个问题,一个较好的办法是讲获取栈顶的操作与弹栈操作分开
Koeing查找规则
如果你在声明函数的时候使用了一个类,那么在查找正确的函数名字时,编译器将会在包含参数类型的名称空间中也进行函数名字的匹配
网友评论