Используя malloc
и free
, легко выделять структуры с дополнительными данными за пределами конца. Но как мне добиться того же с помощью new
/ delete
?
Я знаю, что могу использовать новый синтаксис размещения вместе с malloc
для части выделения, но delete
будет работать правильно и переносимо, если я помещу объект в память, выделенную malloc
?
Я хочу сделать то же, что и в следующем примере, но с использованием new
/ delete
вместо malloc
/ ] free
, так что конструкторы / деструкторы будут вызываться правильно:
#include <cstdlib>
#include <cstring>
#include <iostream>
class Hamburger {
int tastyness;
public:
char *GetMeat();
};
char *Hamburger::GetMeat() {
return reinterpret_cast<char *>(this) + sizeof(Hamburger);
}
int main(int argc, char* argv[])
{
Hamburger* hb;
// Allocate a Hamburger with 4 extra bytes to store a string.
hb = reinterpret_cast<Hamburger*>(malloc(sizeof(Hamburger) + 4));
strcpy(hb->GetMeat(), "yum");
std::cout << "hamburger is " << hb->GetMeat() << std::endl;
free(hb);
}
Вывод: hamburger is yum