【发布时间】:2015-07-16 16:44:33
【问题描述】:
非常直接的问题:
要求赋值运算符不能抛出异常的原因是什么?
同时,构造函数可以抛出吗?
如果你不能抛出异常,如果没有足够的内存用于缓冲区分配,如何处理众所周知的“自定义”字符串示例?
如果你只是分配更少或保持旧状态,但不抛出异常,一切都会“看起来”顺利,但会出现严重(隐藏)错误。
【问题讨论】:
-
C++中没有这样的通用要求。
-
嗯。好的,但为什么每个人都强调这一点?
-
因为你不知道被分配的对象在异常之后保持什么状态?作业前的状态?分配后的状态?
-
一两句话会有所帮助。
-
@n.m.没错,我的观点是我的个人观点,但是,由于赋值运算符是在可能的情况下自动生成的,所以调用者不知道 throw 语义,而在调用函数时他知道。那只是我的两分钱:)
标签: c++ c++11 exception assignment-operator