http://www.drdobbs.com/cpp/practical-c-error-handling-in-hybrid-env/197003350?pgno=4
在这篇文章中香草萨特解释说,抛出一个异常,需要对异常的副本,因为它是作为一个临时创建的,因此使用的std::auto_ptr
,以避开拷贝开销。 在移动语义的光被提供在C ++ 11是这仍然是必要的?
http://www.drdobbs.com/cpp/practical-c-error-handling-in-hybrid-env/197003350?pgno=4
在这篇文章中香草萨特解释说,抛出一个异常,需要对异常的副本,因为它是作为一个临时创建的,因此使用的std::auto_ptr
,以避开拷贝开销。 在移动语义的光被提供在C ++ 11是这仍然是必要的?
我刚才检查,该标准允许
由于这些遗漏是允许的,该规范要求第一方面的复制或移动作为右值的来源。 因此,这意味着相应的对象将如果可能被移动。 当然,复制和移动省音仍允许作为第一选择。
我被告知,catch子句参数作为右值初始化的异常对象初始化的代价可能会被从标准(丢弃,因为一般是不可能适用于所有情况,检测时省略时,程序的行为是不变复制/移动),所以我建议不要依赖于这个(第二颗子弹上图)。
什么,你仍然可以依靠的是一个局部变量的移动进入异常对象,如throw x;
(上述的第一子弹)。
从异常对象移动现在是不是强制性的。
它是C ++ 11的缺陷。 见CWG1493 。