缺点:
在构造函数中执行操作引起的问题有:
构造函数中很难上报错误, 不能使用异常.
操作失败会造成对象初始化失败,进入不确定状态....对于用户定义的类型, 移动操作一般是通过移动构造函数和移动赋值操作符实现的.
拷贝 / 移动构造函数在某些情况下会被编译器隐式调用. 例如, 通过传值的方式传递对象....如果类型不可拷贝, 但是移动操作的正确性对用户显然可见, 那么把这个类型设置为只可移动并定义移动的两个操作.
建议通过 = default 定义拷贝和移动操作. 定义非默认的移动操作目前需要异常....在类没有实现 API 中某个必须的方法时, 编译器同样会发现并报告错误.
缺点:
对于实现继承, 由于子类的实现代码散布在父类和子类间之间, 要理解其实现变得更加困难....参见可拷贝类型和可移动类型.
.cc 文件中函数的定义应尽可能和声明顺序一致.
不要在类定义中内联大型函数. 通常, 只有那些没有特别意义或性能要求高, 并且是比较短小的函数才能被定义为内联函数.