我们应该避免创建模板参数的对象

时间:2015-07-10 06:18:35

标签: c++ exception

考虑以下功能模板:

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(...),但那不是很好。

那么,当我需要创建模板参数的对象时,我该怎么办?

1 个答案:

答案 0 :(得分:2)

您遇到的问题是您需要处理异常。

在C ++中,您使用RAII解决了相关问题。您的init()函数应该做的唯一事情是清理它分配的资源。 T的资源已经清理完毕,init的来电者负责处理init的失败。