Превышение доступности с помощью new / delete

Используя 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

8
задан Unihedron 11 August 2014 в 15:21
поделиться