通常的做法是为C定义一个转换为new的宏,为C转换为malloc吗? (和等效的删除/免费宏)
答案 0 :(得分:6)
通常的做法是为C定义一个转换为new的宏,为C转换为malloc吗? (和等效的删除/免费宏)
没有
我想知道这样的事情是否是常见的做法,因为我从未在任何节目中看到过它,但我想不出有什么理由可以做到这一点
C不是C ++。 C ++不是C.绝对没有理由这样做。
答案 1 :(得分:3)
不可能使malloc
的行为与new
完全相同(没有太多的诡计,其中的一些细节将非常难以实现),因为new
监督建造物体。
让malloc
变成new
会更容易一些,因为malloc
没有什么“特殊”。
如果你想要可移植的代码,不要用C ++编写代码[如果你关心的是C ++的可用性还是其他],请使用C(完全可以使用C ++在合理的便携式中调用C函数)方式,相反的方式更难)。但如果您使用C ++编写,则使用new
,而不是malloc
。
当然注意,如果您有一个C ++编译器,并且您的环境由于某种原因不支持new
(例如在Windows XP内核模式驱动程序中使用C ++代码,就像我在某一点上使用的工作一样[不,这不是我的想法,我没有实现它,我只是在项目中工作])可以实现基于new
的运算符malloc
或其他一些基本的“给我一些记忆”类型的函数[在Windows内核驱动程序中也没有malloc
,但是当然也有分配内存的方法。
当然,考虑到你实际想要实现的目标是至关重要的 - 如果你有某种代码本身在许多平台上运行有意义,可移植性真的很有用,而且通常更容易使代码过于可移植 - 它实际上可以使代码非常复杂。
编辑:我必须补充一点,我不确定我理解为什么C ++会在可移植性方面遇到困难,只要我们说的是源代码可以为不同的机器编译。如果您使用C ++来分发库,那么它会变得有点棘手,因为C ++的某些部分在二进制代码中没有很好地定义。但这是一个特例,而且我很不相信应该成为你所写语言的指导标准。
答案 2 :(得分:3)
没有。 new
和malloc
的语义不同:malloc
分配内存; new
分配内存并调用构造函数。