使用unique_ptr安全嗎? 當我在析構函數中使用cout時,它有時會調用多次。 - 所以它會複製時間。如果它從一個對象中獲取兩個副本 - 數據可能會丟失。在異常類中使用unique_ptr安全嗎
#include <memory>
class MyException
{
std::unique_ptr<Type> data;
MyException();
~MyException() {cout<<"test"<<endl;}
MyException(MyException ex&);
};
int main()
{
try
{
try
{
throw MyException();
}
catch (const MyException& ex)
{
throw;
//or?
throw ex; //will be copied?
}
return 0;
}
catch(const MyException/*& will be missed. will ex be copied?*/ ex)
{
throw; //wich ex will be re-throw, copy or original?
//or?
throw ex; //will be copied?
}
}
我可以肯定,重新引發之間的數據不會丟失嗎? 這是很好的實踐,使用異常內的ptr來收集來自不同級別的錯誤信息?
而且,可以MyException.data丟失後:
std::exception_ptr ex = std::current_exception();
std::rethrow_exception(ex);
重見不作副本;這是有保證的。但是,可能還有其他方面未指定是否製作副本。 「扔」; –
vs 2012. - 輸出中有1個「測試」。用「throw ex;」與 - 輸出中有2個「測試」。 2析構函數= 2對象... =>複製完成。 – Darida