当我在做与C ++相关的Linux工作时,我正在考虑这个问题。
我想问几个问题:
C ++风格的动态分配是否支持Linux系统调用?
由于C ++使用new / delete,在手册页中,linux系统调用使用C风格的动态分配。我们可以互换使用它们,还是将C ++风格的动态变量传递给C风格的动态变量?或者只要保持一致,就可以了吗?
我希望以良好的编码风格(例如易于维护,易于调试)来回答
另外,这个问题更侧重于如何使用C ++开发Linux系统相关的工作?
我是否只在需要时使用C,否则我只是使用C ++来完成我的主要工作?或者有更好的方法来做到这一点?
在标题中,让我们说在C ++程序中的glob.h,我们应该只是#include <glob.h>
还是有另一种方法?
我真的想知道这个问题的行业标准是什么。
答案 0 :(得分:3)
1. C ++风格的动态分配是否支持Linux系统调用?
由于C ++使用new / delete,在手册页中,linux系统调用使用C风格的动态分配。我们可以互换使用它们,还是将C ++风格的动态变量传递给C风格的动态变量?或者只要保持一致,就可以了吗?
new
和delete
无法与malloc
,realloc
和free
安全地混在一起。但是,C ++本身可以使用malloc
,realloc
和free
,有时候很好,但对于正确的“对象”,它只会让你到目前为止:许多现有的C ++库代码硬编码使用new
和delete
,您需要自己处理“放置 - 新建”和破坏对象。您可以根据new
和delete
探索定义自己的malloc
和free
运算符 - 我从未见过它。典型的C堆函数可能针对较大的平均分配大小进行了优化,而C ++可能涉及大量的小请求,因此可能存在性能和内存包效率方面的考虑....
我希望以良好的编码风格(例如易于维护,轻松调试)来回答。
为了可维护性和一致性,C ++程序倾向于最小化或消除它们对malloc
等的使用。
2.另外,这个问题更侧重于如何使用C ++开发Linux系统相关的工作?
我是否只在需要时使用C,否则我只是使用C ++来完成我的主要工作?或者有更好的方法来做到这一点?
C ++是C的近乎超集,具有一些非常好的功能,可用于编写大型,可维护和高效的程序。如果您知道如何使用它,恕我直言,您应该默认使用它。当您需要更多可移植性时,请使用C,或者希望与其他无法信任的人一起工作,合理地使用C ++! (而且我认真地说。)
3.在标题中,让我们说在C ++程序中的glob.h,我们应该只是#include还是有另一种方式?
是的...但您可能希望将前一行中的extern "C" {
与下一行中的}
包围,以禁止C ++符号名称重写。
答案 1 :(得分:1)
#1。是
#2。
我是否只在需要时使用c,否则我只是使用c ++来完成我的主要工作?
是。
绝大多数Linux的功能都是由C接口提供的。 boost
是一个很好的反例。你不会在那里找到特定于Linux的功能,但是通用功能比glibc
提供的功能更加自然。
#3。是的,你可以这样做,或者你可以考虑boost::filesystem
(或类似的)。
答案 2 :(得分:0)
我得到的是,当你编写C ++程序时,你可以调用系统函数,与你在C ++中调用任何函数的方式几乎没有差别,因为它们只是函数调用。 你是负责分配内存和清理内存的人(或者更确切地说,你是通过内置的C ++内存管理,如'new'和'destroy'或任何与你的项目相关联的垃圾收集器。事实上,你正在调用Linux系统函数并不重要。只需调用它们就像你可能创建的类似C函数一样。
我会说,无论你教的是什么,编写代码都是很好的C ++编码风格。我想你会比你想象的更少担心。