递归放置分配

Recursive placement allocation

本文关键字:分配 递归      更新时间:2023-10-16

是否可以进行递归分配?
如果我有这个课:

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

我想在特定的缓冲区上动态分配它,我希望M_Field2在该缓冲区上分配得太多,因此我将在" A"中定义的每个对象。
可以做吗?

您需要进行一些内存管理。首先,您需要将缓冲处理程序传递给类构造函数。在构造函数内部,您必须找到一个偏移量,您可以在其中存储动态分配的成员,最后您还需要为成员使用新的位置。这样的东西:

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);

调用

edit :您可能不会将缓冲区传递给构造函数(不确定,并且可能取决于编译器,需要检查):

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);

调用