私のアプリケーションは、多くの量のPanda
オブジェクトを使用しています。各Panda
にはBamboo
のオブジェクトのリストがあります。このリストは、Panda
が初期化されると変更されません(Bamboo
オブジェクトが追加または削除されません)。次のように現在、私のクラスが実装されています可変長オブジェクト:これまでは良いアイデアですか?
class Panda
{
int a;
int b;
int _bambooCount;
Bamboo* _bamboo;
Panda (int count, Bamboo* bamboo)
{
_bambooCount = count;
_bamboo = new Bamboo[count];
// ... copy bamboo into the array ...
}
}
Bamboo
オブジェクトの配列を割り当てるのオーバーヘッドを軽減するために、以下のように、私はこのクラスを実装することができ - 基本的には、代わりに通常のコンストラクタを介してオブジェクトを作成するのではなく、建設この方法は、Panda
オブジェクトとそのBamboo
アレイの両方を保持するために、単一のメモリブロックを割り当て:
class Panda
{
int a;
int b;
Panda()
{
// ... other initializations here ...
}
static Panda *createPanda (int count, Bamboo* bamboo)
{
byte* p = new byte[sizeof(Panda) +
sizeof(Bamboo) * count];
new (p) Panda();
Bamboo* bamboo = (Bamboo*)
p + sizeof(Panda);
// ... copy bamboo objects into the memory
// behind the object...
return (Panda*)p;
}
}
あなたは増加し、保守作業以外の第2の設計に問題を予見することはできますか?これは受け入れ可能な設計パターンですか、それとも後で私に噛み付くことができる時期尚早の最適化ですか?
これは噛まれます。そして、それは辛いです。 –
C++のクラス型のほとんどのセマンティクスを解消しています。可変長オブジェクトはC++では存在しません。 – jalf
このようなハックに興味がある人は、Symbian/C++のTBuf8とTBuf16クラスのテンプレートをご覧ください。 –