c++ - 在 C++ 代码中使用/混合 C?

标签 c++ c memory-management mixing

在 C++ 中使用 C 不好吗?

很多人告诉我,在 C++ 中使用 C 是不好的,因为它不安全,而且需要更多的内存管理。我一直告诉他们,只要你知道自己在做什么,并且删除“new”并释放“malloc”,那么 C 就不是问题。

我目前在一个论坛上,关于 std::stringchar* 的争论正在发生。有人说分配一个简单的 char* 内存块效率更高,只要释放它就可以了。另一方面,我们有人说 std::string 更好,因为它不涉及内存管理,但效率较低。

所以这里的主要问题是:

  • 混合 C/C++ 不好吗?编写 C++ 代码时是否应该只使用 100% C++?

任何答案将不胜感激!

最佳答案

I keep telling them that as long as you know what your doing, and you delete your new's and free your malloc's then C isn't a problem.

这是真的;如果您非常小心并确保手动清理东西,那么这不是问题。但是你真的有时间去做吗?每次调用 new 都会抛出 std::bad_alloc。您是否总是捕获每个可以抛出的异常并手动清理任何资源?

我冒险猜测答案是否定的,因为编写这样的代码非常乏味,而且很难绝对确定这样编写的代码是正确的,即使在很少见的情况下失败。

如果答案是"is",那么您为什么要浪费这么多时间来担心资源管理?范围绑定(bind)资源管理(SBRM;通常称为资源获取即初始化 (RAII))之类的 C++ 习惯用法和标准模板库之类的库可帮助您更轻松地编写正确的代码。没必要的时候,为什么要艰难地做事?

Should you ONLY use 100% C++ when your coding C++?

是的,但是如果有一个 C 库可以满足您的需要,或者如果您有想要使用的遗留 C 代码,您当然可以使用该代码;一定要小心。通常,与 C 代码互操作的最简洁方法是围绕它编写 C++ 包装器。

关于c++ - 在 C++ 代码中使用/混合 C?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4025869/

相关文章:

ios - 关闭后从 UIWebView 释放内存/cookie/缓存

c# - 当您声明一个没有实例的对象时,.Net 会做什么?

c++ - ActiveMQ C++ 教程

c++ - 如果没有提供管道,读取 std::cin 会挂起

c++ - 为什么我必须重新声明继承类的虚函数?

c - 来自 DFS 的生成树导致错误的值

c - 在 C 中释放局部定义的变量

c++ - "this"是类方法中的默认参数吗?

c - 如何在不使用 fork 轰炸 C/unix 的情况下使用 exec 运行无限循环?

c - 关于 Makefile 中的 CFLAGS