c++ - 对 C 指针使用 std::bad_alloc

标签 c++ exception memory

我在 C++ 项目中使用用 C 编写的库。

我想使用 C++ 异常来处理 C 错误。特别是,如果分配失败,抛出异常会很好。

我可以在持有指向 C 结构的 C 样式指针的类的构造函数中执行此操作:

if (c_object == NULL)
    throw std::bad_alloc();

但如果该类负责多个 C 对象,则它们无法释放所有已分配的指针,因为未调用析构函数。

我觉得我可以使用智能指针,但我对它们没有太多经验。更重要的是,我必须能够访问原始 C 指针才能正确使用 C api。

有没有优雅的解决方案?

最佳答案

评论里已经提到了,我只是重复一遍作为回答:

But if the class is responsible for several C objects they are no ways of free-ing all already allocated pointers since the destructor isn't called.

没错。由于这一点和单一职责原则,每个 C++ 类最多管理一个非托管资源(在您的情况下为“C 对象”)。那些管理资源的类绝对不会做任何其他事情。

如果你使用智能指针,你就是这样做的:智能指针类管理对单一类型资源的访问,即通常用 new 分配的堆对象(后者可以定制) .如果这对您有帮助,请随意使用智能指针,这完全没问题,但永远不要编写管理多个原始资源的类。

关于c++ - 对 C 指针使用 std::bad_alloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5042924/

相关文章:

c++ - 幻方,我无法用它来对行、列和对角线求和

异常(exception):迭代期间的并发修改: '_GrowableList' 的实例(长度:17)

c++ - 为什么只保证已处理异常的堆栈展开?

java - 我在哪里可以在 Spring 捕获非休息 Controller 异常?

c - 在执行后续代码之前强制执行内存写入

c++ - 为什么 C++ 字符串迭代器不检查错误?

c++ - 为什么当我输入一个字符时我的程序有一个无限循环?

java - 压缩 - java.lang.OutOfMemoryError : Java heap space

c - 如何使用引用了内存中存储的inode创建虚拟文件

c++ - 在 C++ 应用程序中使用 box.net、dropbox(或任何云存储)