是否可以进行递归布局分配?
如果我有这门课:
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;
public:
A(int size)
{
m_field1 = size;
m_field2 = new char[size];
}
};
我想在特定的缓冲区上动态分配它,我希望 m_field2 将在该缓冲区上分配太多,我将在“A”中定义的每个对象也是如此。
可以做到吗?
你需要做一些内存管理。首先,您需要将缓冲区处理程序传递给您的类构造函数。在构造函数中,您必须找到一个偏移量,您可以在其中存储动态分配的成员,最后您还需要对成员使用placement new。像这样的东西:
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);