在 C++ 中使用 C 不好?
虽然是一个主观问题:在我看来,要采取措施避免在 c++ 程序中使用 c。
许多人告诉我,在 C++ 中使用 C 很糟糕,因为它不安全,而且需要更多的内存管理。我一直告诉他们,只要你知道你在做什么,并且你删除你的新文件并释放你的 malloc,那么 C 就不是问题。
您正在重新引入 c++ 旨在克服的缺陷和危险,这不是 c++ 程序中的处理方式。
我经常检查/拒绝/重写进入“c with c++ features”或“c++ with c features”的代码库的代码。我什至将 malloc、free 等更改为在根名称空间中断言(除其他外)。
我目前在一个论坛上,关于 std::string 与 char* 的争论正在发生。有人说分配一个简单的 char* 内存块效率更高,只要解除分配就可以了。另一方面,我们有人说 std::string 更好,因为它不涉及内存管理,但效率较低。
在 c++ 中表示字符串的选项比 std::string 更多。
在我看来,创建一个代表字符串并服务于特定目的的新类是完全有效的,或者遵循额外的合同(必要时)。new[]/delete[]
这种字符串表示的部分契约(当然)是它们在使用动态内存时管理自己的资源。
如果效率如此重要并且std::string
对于特定任务来说不太理想,那么 c++ 足够强大,可以通过在 c++ 中创建专门的接口来表达您对这些特定情况的意图。在很多情况下这是可以接受的(imo),但并不总是值得花时间投资。无论如何,它比将 c idioms/styles/dangers 集成到 c++ 程序中更容易管理。
所以这里的主要问题是:混合 C/C++ 不好吗?当您编写 C++ 代码时,您是否应该只使用 100% C++?
最好为您的需求创建可重用的基于对象的解决方案。提供的示例中的危险可以完全封装(如果这种优化确实值得花时间投资),并且可以使用 c++ 习惯用法编写,而不会损失性能并具有更好的可维护性。