gpt4 book ai didi

c++ - 通过 void 指针将对象传递给函数

转载 作者:行者123 更新时间:2023-11-28 07:34:30 27 4
gpt4 key购买 nike

我正在编写一个简单的内存管理器。我正在尝试简化此功能,以便其他人可以只需添加他们想要分配的对象作为第一个参数。内存管理器将为该对象分配空间,并设置对象的指针指向分配的空间空间。问题是我不确定如何将参数设置为任何类型可以传入对象的数量,而不必为了让它工作而疯狂地转换它。

函数如下:

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

任何帮助或指导将不胜感激! :)

最佳答案

使用模板和重载,可以直接对data的类型进行操作,包括它的大小:

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

不过,当谈到数组时,通常我们会尽量避开 C++ 中的指针。使用 vector<T>例如。您可以指定自己的分配器。

我会考虑你是否真的想返回一个原始指针;您可能会考虑返回一个智能指针对象。

您的数组大小计算有缺陷;我不太确定你想在那里做什么。我希望 allocSize实际上是元素大小,因此计算是:

allocSize = (allocSize * elementCount);

但是您无法知道用户请求了多少元素。

关于c++ - 通过 void 指针将对象传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17012531/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com