【发布时间】:2013-02-11 19:54:06
【问题描述】:
我想覆盖我班级中的删除运算符。这是我正在尝试做的,但没有成功。
class Complex{
void *operator new(size_t s);
void operator delete(void *ptr);
};
void Complex::operator delete(void *ptr){
delete ptr;
}
我得到错误:
删除 void* 是未定义的
【问题讨论】:
-
你可能想要
::delete ptr; -
方法签名看起来不对,
new没有size_t参数(只有new[]有),但delete确实 有一个size_t参数。 -
您不能覆盖
delete运算符;这是一个语言关键字。您正在做的是覆盖operator delete,这是一个由delete运算符调用的函数。这听起来像是一个文字游戏,但这是一个重要的区别。 -
delete 不应将 size_t 作为参数。因为我想这样写: Complex c = new Complex();删除 c;
-
operator delete必须撤消operator new所做的任何事情。你能告诉我们operator new吗?
标签: c++ oop new-operator