Nic*_*ick 0 c++ exception assignment-operator c++11
非常直截了当的问题:
要求赋值运算符不能抛出异常的原因是什么?
同时,构造函数可以抛出?
如果你不能抛出异常,如果没有足够的内存用于缓冲区分配,如何处理众所周知的"自定义"字符串示例?
如果你只是分配更少或保持旧状态,但不抛出异常,一切都会"看起来"平滑,但会出现严重(隐藏)错误.
绝对没有这样的要求.投掷任务完全可以.在许多情况下,抛掷是不可避免的(例如,当赋值必须分配一些内存并且没有留下时).
永远不应该做的是将对象置于未定义状态.它必须成功分配一个新值,或者让对象保持原始状态(或者可能是其他一些不太理想的有效状态)并抛出.
这种语义通常由复制和交换习语实现.复制阶段可以抛出.这使受让人完整无缺.交换阶段绝对不能抛出.