0

私は単純なメモリマネージャーを書いています。この関数を単純化しようとしているので、他の人は割り当てたいオブジェクトを最初のパラメーターとして追加できます。メモリ マネージャは、そのオブジェクトに領域を割り当て、割り当てられた領域を指すようにオブジェクトのポインタを設定します。問題は、パラメーターを作成する方法がわからないため、ほぼすべてのタイプのオブジェクトを渡すことができ、狂ったようにキャストして機能させる必要がありません。

関数は次のとおりです。

bool MemoryManager::Allocate(void** data, unsigned int allocSize, bool isArray)
{
    if((m_Heap.m_Pool == nullptr) || (*data != NULL))
        return false;

    if(isArray)
        allocSize += sizeof(unsigned int) * 4;

    void* mem = m_Heap.Allocate(allocSize);
    if(mem)
    {
        *data = mem;
        return true;
    }
    else
        return false;
}

これは現在、それを機能させるために呼び出す方法です。

int* Test = NULL;
MemoryManager::GetInstance()->Allocate((void**)(&Test), sizeof(int), false);

ヘルプやガイダンスをいただければ幸いです。:)

4

1 に答える 1

1

dataテンプレートとオーバーロードを使用すると、サイズを含むの型を直接操作できます。

template<typename T>
bool MemoryManager::Allocate(T*& data)
{
    size_t allocSize = sizeof(T);
    ...
}

ただし、配列に関しては、通常、C++ ではポインターを避けようとします。vector<T>たとえば、使用します。独自のアロケータを指定できます。

実際に生のポインターを返したいかどうかを検討します。スマート ポインター オブジェクトを返すことを検討してください。

配列サイズの計算に欠陥があります。あなたがそこで何をしようとしているのか、よくわかりません。それは実際には要素のサイズであると予想されるallocSizeため、計算は次のとおりです。

allocSize = (allocSize * elementCount);

しかし、ユーザーが要求している要素の数を知る方法はありません。

于 2013-06-09T18:08:09.093 に答える