0

再帰的な配置割り当てを行うことは可能ですか?
このクラスがある場合:

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

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

};

特定のバッファに動的に割り当てたいのですが、m_field2 がそのバッファに割り当てられすぎて、「A」内で定義するすべてのオブジェクトも割り当てられてしまいます。
それはできますか?

4

1 に答える 1

0

メモリ管理を行う必要があります。まず、クラス コンストラクターにバッファー ハンドラーを渡す必要があります。コンストラクター内では、動的に割り当てられたメンバーを格納できるオフセットを見つける必要があります。最後に、メンバーにも新しい配置を使用する必要があります。このようなもの:

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

于 2012-11-04T13:24:11.097 に答える