c++ - 如何使用返回值整理 C++ 错误处理? (解除分配)

标签 c++ exception error-handling return-value

我将在一个使用异常处理错误的大型项目中使用库。该库使用返回代码进行错误处理,这意味着所有函数都将返回一个常量,定义函数是成功还是发生任何错误。

如果库函数失败,我的函数常常不得不中止。有比以下代码段中给出的示例实现更好的方法来处理这些错误吗?

我的问题的一个主要问题是在每次计算返回代码后释放以前分配的内存。这是容易出错和麻烦的。我希望找到一些准则来防止在每次调用库函数时重新分配...

void examplefunc()
{
  T* pT = new T();
  U* pU = new U();
  Q myQ;
  int iRes = CONST_SUCCESS;

  if ((iRes = myQ.func1())!= CONST_SUCCESS)
  {
    delete pU;
    delete pT;
    throw translateException(iRes);  // providing exc      
  }
  if ((iRes = mQ.func2())!= CONST_SUCCESS)
  {
    delete pU;
    delete pT;
    throw translateException(iRes);  // providing exc 
  }

  delete pU;
  delete pT;
  return;
}

谢谢大家的建议。有什么我可以遵循的准则吗?

最好的问候 山姆

最佳答案

使用智能指针。例如。而不是:

T* pT = new T();

你可以使用 C++11 的 unique_ptr:

std::unique_ptr<T> pT = make_unique<T>();

一旦包装对象超出范围,unique_ptr 就会自动销毁内部指针。

关于c++ - 如何使用返回值整理 C++ 错误处理? (解除分配),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12656124/

相关文章:

c++ - 具有设置参数的静态成员函数需要访问非静态数据成员

JNI : unknown type name JNIEnv jint JavaVM 的 C++ 编译错误

c++ - 如何在 C++ 列表中保存计时时间

c++ - 如何使用 C++ STL 库将 const char[] 数组作为 constexpr 模板参数传递?

vb.net - 错误: 'AddRange' is not a member of 'System.Array'

java - 对于我的特殊情况,服务器应返回哪个HTTP代码?

java - NoUniqueBeanDefinitionException : no qualifying bean of type. 我定义了一个匹配的 bean,但我发现了 2 个

winforms - 为什么表单加载无法捕获异常?

java - 使用什么异常来防止方法被多次调用?

php - PHP foreach循环,带有循环错误消息