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

标签 c++ memory-management parameters casting void-pointers

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

函数如下:

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/

相关文章:

c# - 在sql查询中使用参数来确定要使用哪一列

sql - 是否有数组的 SQL 参数绑定(bind)?

c++ - 使用 C++ 从文件读取到列表

c++ - 类字段重置为零

带有 jemalloc 的 C++ STL

java - Android - 释放位图内存

android - 清除应用存储

c++ - 使用 boost::make_shared 创建 vector 元素无法正常工作

c++ - 为什么 Bison 中的简单语法规则不起作用?

reporting-services - 在报表中显示参数(多值)