c++ - 我们是否应该避免创建模板参数的对象

标签 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(...) 但这并不好。

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

最佳答案

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

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

关于c++ - 我们是否应该避免创建模板参数的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31333757/

相关文章:

c++ - 在容器中使用智能指针的原因

c++ - 如何指向 std::string 中固定位置的分隔符

C++ 编译器错误递归模板

c++ - 在 boost::lambda 中使用 static_cast

java.io.UnsupportedEncodingException

java - 给定方法签名 A bar(B q) throws C,以下哪项将无法编译?

c++ - 指纹调用导致 C++ 中的段错误

.net - 返回 ""代替正确的字符串

java - Guava Preconditions RuntimeExceptions 处理

java - 如何在批处理中获取包含异常的精确sql查询