递归放置分配
Recursive placement allocation
是否可以进行递归分配?
如果我有这个课:
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);
相关文章:
- 通过递归进行因子分解
- 递归函数计算序列中的平方和(并输出过程)
- 使用递归的数组的最小值.这是怎么回事
- 递归列出所有目录中的C++与Python与Ruby的性能
- 递归计数给定目录的文件和所有目录
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 使用递归模板动态分配的多维数组
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- 使用 std::map 的递归堆栈分配如何工作?
- C :递归分配内存
- 为什么这种递归子集和算法会导致指针分配错误
- 使用多维数组的递归和动态内存分配来查找 NxN 矩阵的行列式
- 递归放置分配
- 递归后序遍历解除分配二叉树节点
- 分配不带递归的多维数组
- 递归删除链表,使用 new 分配内存
- 在递归函数中,堆上分配vs堆栈上分配
- 试图在递归函数内部捕获失败的分配:未处理的异常/堆栈溢出
- 递归函数的内存分配
- 在堆栈末尾进行分配的递归函数