使用 unique_ptr 是否安全?当我在析构函数中使用 cout 时,有时它会调用不止一次。- 所以它会不时复制。如果它从一个对象中获取两个副本 - 数据可能会丢失..
#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);