我在 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/