2013-06-09 2 views
0

간단한 메모리 관리자를 쓰고 있습니다. 다른 사람들이 첫 번째 매개 변수로 할당하려는 개체를 추가 할 수 있도록이 함수를 단순화하려고합니다. 메모리 관리자는 해당 개체에 대해 공간을 할당하고 할당 된 공간을 가리 키도록 개체의 포인터를 설정합니다. 문제는 매개 변수를 만드는 방법에 대해 잘 모르겠다. 어떤 유형의 객체에 대해서라도 객체를 전달할 수 있습니다. 제대로 작동 시키려면 캐스트하지 않아도됩니다. 내가 얻을를 호출 할 필요가 어떻게 작동void 포인터를 통해 객체를 함수에 전달합니다.

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

어떤 도움이나지도 주시면 감사하겠습니다 여기

는 기능입니다 ! :)

+1

템플릿을 사용하여 참조로 가져 가야합니까? – chris

답변

1

당신은 크기를 포함하여, data의 종류에 직접 작동 할 수 템플릿을 사용하고 오버로드 :

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

는 일반적으로 우리는 C에서 포인터와 놀지하려고하지만 배열에 관해서 ++. 예를 들어 vector<T>을 사용하십시오. 자신의 할당자를 지정할 수 있습니다.

나는 원시 포인터를 실제로 반환할지 여부를 고려할 것입니다. 스마트 포인터 객체를 반환하는 것을 고려할 수 있습니다.

배열 크기 계산에 결함이 있습니다. 나는 네가 뭘하려고하는지 잘 모르겠다. 나는 allocSize 정말 요소 크기는 것을 기대하고, 따라서 계산은 다음과 같습니다

allocSize = (allocSize * elementCount); 

하지만 당신은 사용자가 요청하는 얼마나 많은 요소를 알 수있는 방법이 없습니다.

관련 문제