Рекурсивное размещение размещения

Можно ли сделать рекурсивное размещение размещения?
если у меня есть этот класс:

class A
{
private:
   int m_filed1;  
   char* m_field2;

public:
   A(int size)  
{  
  m_field1 = size;
  m_field2 = new char[size];
}

};

и я хочу динамически разместить его в определенном буфере, я хотел бы, чтобы m_field2 был слишком распределен в этом буфере, как и каждый объект, который я определю внутри "A".
Это можно сделать?

1 ответ

Решение

Вам нужно будет сделать немного управления памятью. Прежде всего, вам нужно передать обработчик буфера вашему конструктору классов. Внутри конструктора вы должны найти смещение, в котором вы можете хранить динамически размещенные элементы, и, наконец, вам нужно будет использовать новое размещение для элементов. Что-то вроде этого:

class A
{
private:
   int m_filed1;  
   char* m_field2;
   char* m_field3;
public:
   A(int size, char *buffer)  
{  
  m_field1 = size;
  m_field2 = new (buffer + sizeof(A)) char[size];
  m_field3 = new (buffer + sizeof(A) + sizeof(m_field2)) char[size];
  //...
}

};

Вызвать A* objA = new (mybuffer) A(size, mybuffer);

Изменить: вы можете уйти, не передавая буфер конструктору (хотя не уверен, и может зависеть от компилятора, нужно проверить):

class A
{
private:
   int m_filed1;  
   char* m_field2;
   char* m_field3;
public:
   A(int size)  
{  
  m_field1 = size;
  m_field2 = new ((char*)this + sizeof(A)) char[size];
  m_field3 = new ((char*)this + sizeof(A) + sizeof(m_field2)) char[size];
  //...
}

};

Вызвать A* objA = new (mybuffer) A(size);

Другие вопросы по тегам