【发布时间】:2012-08-20 18:43:45
【问题描述】:
http://www.drdobbs.com/cpp/practical-c-error-handling-in-hybrid-env/197003350?pgno=4
在本文中,Herb Sutter 解释说,抛出异常需要异常的副本,因为它是作为临时创建的,因此使用std::auto_ptr 来绕过复制开销。鉴于 C++11 中提供了移动语义,这还有必要吗?
【问题讨论】:
-
这个副本通常会被一个体面的编译器优化掉。您可以通过在复制构造函数上设置调试器断点来检查您的。
-
异常性能不应该是您关心的问题。如果是,请更正您的程序,使其不是。
-
同意,这更具学术性。
-
它确实允许投掷只移动类型。如果它需要可复制性,例如,您不能抛出
std::unique_ptr。 -
至少,MSVC++2013 不会为
throw std::move(ex);调用移动构造函数:stackoverflow.com/questions/32759433/…
标签: c++ c++11 move-semantics