由于是编译期技术, 这个技巧在TMP中也很常用
宏函数由于避免了函数调用开销因此可以带来很高的执行效率, 但是要记得宏函数中每个变量最好都加上小括号, 保证生成出的代码不会那么容易遇到优先级问题
对于宏函数我们还应该用...如果希望自定成员不要默认初始化, 那么应该在初值列中进行初始化, 这会覆盖掉编译器的设置, 即便是默认初始化我们也可以不传递参数从而显式进行默认初始化
因此为了防止遗漏, 我们可以对每个类成员都在初值列中进行初始化..., 此时有可能继续抛出异常导致多异常未定义
因此我们应该将所有析构函数用try-catch包裹起来, 可以选择吞掉异常然后继续执行, 也可选择记录后结束程序
更合理的方法是额外写一个close函数, 用户可以主动调用...但是这里的问题是如果目标和当前对象是相同的(也就是别名), 则会提前将目标内存释放....的设计
有以下几点一定要在创立前进行思考:
如何创建和销毁
初始化和赋值的区别
如果被按值传递的话会有什么区别
有哪些是"合法值"
需要继承/被继承么
需要哪些类型转换
需要哪些操作符
哪些编译器函数需要拒绝