>?/P> < P>在C++中,你不需要使用 MalOC > ,c++,c,qt,qt4,C++,C,Qt,Qt4" /> >?/P> < P>在C++中,你不需要使用 MalOC > ,c++,c,qt,qt4,C++,C,Qt,Qt4" />

我什么时候需要在C+;中使用malloc+;? 如果我可以在C++中创建QStand,比如: QString s = "my string"; // or, QString *s = new QString("my string"); 那么,事件在什么时候需要使用 MalcC < /C> >?/P> < P>在C++中,你不需要使用 MalOC >

我什么时候需要在C+;中使用malloc+;? 如果我可以在C++中创建QStand,比如: QString s = "my string"; // or, QString *s = new QString("my string"); 那么,事件在什么时候需要使用 MalcC < /C> >?/P> < P>在C++中,你不需要使用 MalOC > ,c++,c,qt,qt4,C++,C,Qt,Qt4,好的,现在我已经说过了“永不”,一个例外是当您使用C代码时,由于某种原因,它获得了您提供给它的内存块的所有权,然后在指向该内存的指针上调用free,以释放它 我以前从未见过这种情况(我通常不使用C库,我不知道这种情况有多普遍),这只是一种人为的情况,我可以想到使用malloc是不可选的,因为在 < < > < /p> < p>中创建的内存中调用“免费>代码> 和 Fabue/Cuff>,但是要做< /P> void* p = operator new(1000); ... operator d

好的,现在我已经说过了“永不”,一个例外是当您使用C代码时,由于某种原因,它获得了您提供给它的内存块的所有权,然后在指向该内存的指针上调用
free
,以释放它


我以前从未见过这种情况(我通常不使用C库,我不知道这种情况有多普遍),这只是一种人为的情况,我可以想到使用
malloc
是不可选的,因为在<代码> < < <代码> > < /p> < p>中创建的内存中调用“<代码>免费>代码> <几乎没有必要在C++中使用<代码> MalOC 。

C++主要处理您的分配和解除分配,不像C.

换句话说,您不应该将
malloc
用作示例。

永远不要

malloc
分配未初始化的内存。你很少需要在C++中这样做。大多数情况下,您使用
new
delete
创建和销毁对象

在某些情况下,您确实需要分配未初始化的内存,例如在实现动态大小的容器时,例如
std::vector
boost::optional
。但是C++的方式是不使用<代码> Malc C < /C>和<代码> Fabue/Cuff>,但是要做< /P>
void* p = operator new(1000);
...
operator delete(p);

@VladLazarenko touche:)“C”和“old”在我的脑海中是同时出现的,但那是错误的,只是一个我似乎无法摆脱的习惯。我修正了它。虽然我不能给出例子,但我听到人们说用malloc覆盖新操作符有时更有效。有什么意见吗?为了纠正我自己,我的意思是重载,而不是覆盖。这是不同的。啊,现在我明白你的意思了。是的,我的意思是重载运算符new和运算符delete,但我没有正确表达它。我应该说“使用malloc重载新操作符”或类似的话。不过我的意图很清楚:)@xcrypt对不起,英语不是我的母语,所以有时候细微的差异真的会让我感到厌烦。我将删除所有的评论,因为它们是点式的。FTFY:C++为您遮挡了内存分配和分配,而不像C.@ MaT::1。关于
新建
删除
没有什么含糊不清的地方。如果你不能理解这些,那么你就不应该用C++或C.@ MalSalter编程:我从来没有说过有。事实上,我没有提及<代码>新< /C>或>代码> Debug < /C>。这个问题加强了我的观点,即C++之前学习C语言可以让你更好地理解语言。杰西:怎么会这样?C++之前学习C将只会帮助这里,因为 MalOC/来自C.,但这与C没有任何关系,它只是C++中的另一个内存函数。如果你能够识别C来自什么,也可以从C++中尝试什么来改进C而不学习C,那就没问题。然而,对于没有用C编程的人来说,更难理解以下问题:“为什么不使用malloc?”