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을 예외적으로 사용하는 것이 좋습니다. 당신이 발견 한 것처럼 당신이 예외를 다시 던질 할 때
std::exception_ptr ex = std::current_exception();
std::rethrow_exception(ex);
재발행은 사본을 만들지 않습니다. 그건 보장이야. 그러나 복사본이 만들어 졌는지 여부가 명시되지 않은 다른 지점이있을 수 있습니다. –
vs 2012. "throw;" - 1 "테스트"출력. "throw ex;" - 출력에서 2 "테스트". 2 destructor = 2 object ... => 사본이 작성되었습니다. – Darida