Diferença entre operador global new e malloc
O C ++ possui várias funções para adquirir armazenamento dinâmico, a maioria das quais difere de alguma maneira fundamental. Vários outros são geralmente adicionados pelo sistema operacional.
Dois deles são de interesse especial devido à sua portabilidade e semelhança:malloc
e::operator new
.
Existem diferenças (por exemplo, o padrão e a implementação) entre os padrões globaisvoid* operator new(size_t, ::std::nothrow&)
evoid* malloc(size_t)
?
Como parece haver alguma confusão sobre o que estou falando, considere as duas chamadas a seguir:
void* p = ::std::malloc(10);
void* q = ::operator new(10, ::std::nothrow);
A diferença óbvia e trivial é como desalocar a memória:
::std::free(p);
::operator delete(q);
Nota: esta pergunta não é uma duplicata, por ex.Qual é a diferença entre new / delete e malloc / free? já que fala sobre o uso doglobal operator new
que na verdade não realiza nenhuma chamada de ctor.