如何用C++写一个类

来源:互联网 发布:李小璐遇网络诈骗 编辑:程序博客网 时间:2024/05/19 00:50

其实写一个类很简单,但是要写一个符合各方面要求的类,却不是一件容易的事情。下面总结一下需要考虑的一些问题,先把暂时想到的方面记下来,以后想到新的在增加吧。

类的生死和初始化:
1. copy ctor和copy assignment是不是需要private(单例常用),或者是不是要用private继承来阻止copy行为。
2. dtor是不是需要virtual(防止vptr的开销)
3. ctor和dtor是不是异常安全。ctor如果出现异常,能否用RAII解决。dtor能不能不让异常外漏。
4. RAII资源的copy行为会不会造成不预期的行为(指针为空)。
5. ctor和dtor都不要调用虚函数。

接口和实现:
1. 需要纯虚,虚,还是不虚函数。需要接口继承还是实现继承。
2. 传参数尽量穿const ref,返回参数尽量别返回ref(防止临时变量不见了)。
3. 究竟是不是要用成员函数或者友元函数
4. 有异常的地方,是不是异常安全的,资源有没有得到完全释放。
5. 不想暴露太多的内容出去,可以用handle class隐藏。
6. 使用编译时常量(static const)和运行时常量(const)。
7. 防止过多的临时变量的产生,可以用RVO(return value opt)优化。
8. operator=赋值需要考虑自复制情况和深度复制。返回*this的引用
9. 可以使用operator new和delete来尽量做高效率的分配策略。注意数组形式的new/delete
10. 注意函数是不是线程安全的。

继承和多态:
1. 是否需要多重继承,需要虚继承。
2. 使用父类的指针来操作子类,防止切片的产生。
3. 组合和继承的取舍。
4. 类型转换的时候,dynamic cast不过dynamic_cast比typeid效率低。
5. 是否需要做成模板。
6. 除了虚函数,还可以使用其他方式实现动态调用。比如NVI(non virtual interface)和策略设计模式。
7. 尽量不要在子类中覆盖父类的默认参数。
8. private继承可以造成empty base 空间最优化(EBO)。

暂时想到这么些了,以后有空再整理。

0 0