我的應用程序使用了大量的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;
}
}
你可以預見與第二設計任何問題,除了增加的維護工作等?這是一個可接受的設計模式,或者只是一個過早的優化,可能會在稍後回來咬我?
它會咬人。它會咬人。 – 2009-09-07 17:03:44
你打破了C++中大多數類類型的語義。 C++中不存在可變長度的對象。 – jalf 2009-09-07 17:30:54
如果您對這種令人eye目的黑客感興趣,您可能還想看看Symbian/C++中的TBuf8和TBuf16類模板。 – 2009-09-07 18:45:50