考虑以下功能模板:
template <typename T>
void init()
{
std::unique_ptr<T> ptr(new T());
//do some with it
}
函数模板旨在用于其他一些函数,如下所示:
void bar()
{
try{
init<int>();
} catch(___WHAT?___){ }
}
问题是我不知道如果T
的构造者抛出异常会怎样做。我根本不知道它能抛出什么。当然我可以写catch(...)
,但那不是很好。
那么,当我需要创建模板参数的对象时,我该怎么办?
答案 0 :(得分:2)
您遇到的问题是您需要处理异常。
在C ++中,您使用RAII解决了相关问题。您的init()
函数应该做的唯一事情是清理它分配的资源。 T
的资源已经清理完毕,init
的来电者负责处理init
的失败。