我有一个类,我希望能够设置一个标志,说如果它是堆分配,所以它可以正确清理本身之后,而不是尝试删除自己,如果它是在堆栈。问题是......我似乎无法同时覆盖new
和构造函数。所以它从我的new
重载设置isHeapAllocated
标志,然后到我的构造函数重置标志。检测堆栈或堆分配
void* String8::operator new(size_t size)
{
String8* string = (String8*)malloc(size);
if(string == null)
Exception("allocation fail : no free memory");
string->isHeapAllocated = true;
return string;
}
String8::String8()
{
isHeapAllocated = false;
}
所以new String8()
设置isHeapAllocated
标志,然后将其重置为false
。有没有办法做到这一点?
它真的应该是调用类的职责,以删除'String8'。 – Tushar 2013-04-06 21:03:13
一个类不应该介意它是在堆栈上还是在堆上分配。该类的用户应该执行必要的清理(如果有的话)。 – mfontanini 2013-04-06 21:04:24
恕我直言,你应该使用类似boost类型的特征来获取关于对象的信息,而不是自己实现它。 – 2013-04-06 21:17:33