Wiem, że new
delete
są niezgodne z malloc
free
.Czy można bezpiecznie przekazywać pamięć przydzieloną przy użyciu "new" do bibliotek C?
Czy to oznacza, że należy unikać korzystania z new
dla pamięci, która będzie używana przez bibliotekę C?
Jakie rzeczy mogą się nie udać podczas używania new
zamiast malloc
, kiedy przekazuję pamięć do biblioteki C?
void func()
{
int *p = new int(42);
// Should I insist on using malloc for p if this function is a part
// of a C library?
lib_func(p);
}
@ PM100 to doskonale dobrze zdefiniowane. Wszystko, co jest wymagane przez standardy, to to, co tu jest napisane. W przepełnieniu stosu nie dostarczamy odpowiedzi "oczywiście to po prostu działa". Zapewnienie, że jest to naprawdę bardzo niegrzeczne. –
tak, że jakaś część standardu C++ mówi, że wynik nowego jest identyczny z wynikiem malloc (poza efektem wywołania konstruktora) – pm100
@ pm100: W pewnym sensie tak. Jest w tej samej przestrzeni pamięci (o czym świadczy fakt, że zarówno 'new' jak i' malloc' mogą tworzyć wskaźniki typu 'T *'). –