【发布时间】:2010-10-30 19:42:31
【问题描述】:
假设我有以下代码:
void* my_alloc (size_t size)
{
return new char [size];
}
void my_free (void* ptr)
{
delete [] ptr;
}
这样安全吗?还是必须在删除之前将ptr 转换为char*?
【问题讨论】:
-
为什么要自己做内存管理?您正在创建什么数据结构?需要进行显式内存管理在 C++ 中非常少见。您通常应该使用从 STL(或在紧要关头从 Boost)为您处理它的类。
-
仅供阅读,我使用 void* 变量作为我在 win c++ 中的线程的参数(请参阅 _beginthreadex )。通常它们会准确地指向类。
-
在这种情况下,它是新/删除的通用包装器,可以包含分配跟踪统计信息或优化的内存池。在其他情况下,我看到对象指针被错误地存储为 void* 成员变量,并在析构函数中被错误地删除而没有转换回适当的对象类型。所以我很好奇安全/陷阱。
-
对于 new/delete 的通用包装,您可以重载 new/delete 运算符。根据您使用的环境,您可能会挂钩到内存管理以跟踪分配。如果您最终遇到不知道要删除什么的情况,请将其视为您的设计不是最佳且需要重构的强烈暗示。
-
我认为这个问题有太多的疑问而不是回答它。 (不仅在这里,而且在所有 SO)
标签: c++ memory-management casting void-pointers