考虑以下函数模板:
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(...)
但这并不好。
那么,当我需要创建模板参数的对象时该怎么办呢?
最佳答案
您遇到的问题是您觉得需要处理异常。
在C++中,您使用RAII解决相关问题。 init()
函数唯一应该做的就是清理它分配的资源。 T
的资源已经清理完毕,init
的调用者负责处理init
的失败。
关于c++ - 我们是否应该避免创建模板参数的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31333757/