【发布时间】:2011-11-28 10:15:11
【问题描述】:
我有类似以下的情况,我不确定结构的 std::string 元素是否泄漏内存,或者这是否正常。调用free(v)时,这两个std::strings分配的内存是否被删除?
struct MyData
{
std::string s1;
std::string s2;
};
void* v = malloc(sizeof(MyData));
...
MyData* d = static_cast<MyData*>(v);
d->s1 = "asdf";
d->s2 = "1234";
...
free(v);
泄漏与否?
我使用 void-pointer 是因为我有另一个高级结构,它由一个枚举和一个 void-pointer 组成。根据枚举变量的值,void* 将指向不同的数据结构。
例子:
enum-field has EnumValue01 => void-pointer 将指向一个 malloc 的 MyData01 结构
枚举字段有 EnumValue02 => void-pointer 将指向一个 malloc 的 MyData02 结构
当然,我们非常感谢您对不同方法的建议。
【问题讨论】:
-
看起来你正在以某种方式重新发明多态性。您知道 C++ 中可用的所有现代编程技术吗?您使用
malloc/free表明您没有。 -
不同的数据结构没有任何共同点。所以我想到了使用枚举和void*创建一个空的纯虚拟基类并让所有数据结构继承该基类会更好吗?
-
如果不知道你的具体情况就无法真正判断,但是如果这些结构要存储在同一个上层结构中,它们确实有一些共同点 ;)
标签: c++ memory-management stl memory-leaks