【发布时间】:2010-11-27 06:53:11
【问题描述】:
我已经让 operator new 工作,但是一旦我调用 delete,它就会在 free (ptr) 行崩溃。在这个基类中重载 operator new 和 delete 时,谁能告诉我做错了什么?提示:我不是在问设计问题。
class Base {
private:
int i;
public:
Base () : i (10) {
}
static void * operator new (size_t size) {
if (size = 0) size = 1; // please read this line carefully! size = 0!
return malloc (size);
}
static void operator delete (void *ptr, size_t size) {
if (ptr == NULL) return;
free (ptr);
}
};
【问题讨论】:
-
您是要删除一个对象两次,还是通过调用
new未获得的指针删除一个对象? -
附带说明,
free(NULL)保证是安全的(无操作),因此您不必对其进行特殊处理。 -
hm...我的错:如果将
if (size==0)替换为if (size=0)并添加私有数据成员以及构造函数,则代码将失败。我知道size=0是一个不应该发生的错误,但只有当您在构造函数中初始化此类的私有数据成员时,代码才会失败。
标签: c++ new-operator