目录
2.3 新的type对象如果被passed by value,意味着什么?
1.前言
C++就像在其它OOP(面向对象编程)语言一样,当你定义一个新class,也就定义了一个新的type。作为程序员,很多时间主要用来扩张你的类型系统。这表明我们不只是class的设计者,还是type设计者。重载函数和操作符,控制内存的分配和归还(关于内存的介绍:深度阅读:深入 C++ 内存管理(万字长文) - 知乎 (zhihu.com)),定义对象的初始化和终结,这些操作都取决于我们。因此在进行相关操作时,应该带着和“语言设计者当初设计语言内置类型时”的谨慎来研讨class的设计。
2.相关注意事项
设计优秀的classes是一项艰巨的任务。那么如何设计高效的classes呢。首先应该注意到以下几个问题:
2.1新的type的对象应该如何被创建和销毁?
这主要会影响到class的构造函数和析构函数以及内存分配函数和释放函数
2.2 对象的初始化和对象的赋值该有什么样的差别
2.3 新的type对象如果被passed by value,意味着什么?
2.4 什么是新type的合法值
2.5 新type需要配合某个继承图系吗?
如果继承自某些即有的classes,就受到那些classes的设计束缚,特别是受到“它们的函数是virtual或non-virtual”的影响。如果允许其他classes继承你的class,那么影响你所声明的函数-特别是析构函数是否为virtual。
2.6 新的type需要什么样的转换
如果你希望允许类型T1被隐式转换为T2,就必须在class T1内写一个类型转换函数(operator T2)或在classes T2内写一个non-explict-one-argument(可被单一实参调用)的构造函数。如果只允许explict构造函数存在,就得写出专门负责执行转换的函数,且不得为类型转换操作符或non-explict-one-argument构造函数。
2.7什么样的操作符和函数对此新type而言是合理的?
2.8什么样的标准函数应该被驳回
2.9谁该取用新type的成员
2.10.什么是新type的“未声明接口”
它对效率,异常安全性以及资源运用提供何种保证?在这些方面提供的保证将为你的class内的代码加上相应的约束条件。