我知道你可以使用一个虚拟的"int"参数operator++
并operator--
覆盖这些运算符的后缀版本,但我隐约回想起一些你可以在析构函数上声明的虚拟参数.有谁知道这件事,如果有的话,那个虚拟参数做了什么?
这是我在我十几岁时(即很久以前)读过的旧Turbo C++教程书籍,所以我可能会完全记错了.这也是非常早期的C++,在它被标准化之前,所以它可能是特定于Turbo C++的东西.
您可能正在考虑具有签名的操作员删除的放置和非搬运形式:
void operator delete(void *, void *) throw(); void operator delete(void *, const std::nothrow_t&) throw(); void operator delete[](void *, void *) throw(); void operator delete[](void *, const std::nothrow_t&) throw();
这些在正常操作期间从不被调用,但是在使用placement new构造的对象的构造函数抛出异常的情况下将使用它们.通常你不必定义它们,因为编译器已经在死对象的基础和成员上调用析构函数,而对于新的放置,没有内存可以被释放.但是如果你重载新的并且需要相应的操作符,则可以存在.
第二个参数没有真正使用,只是区分普通的签名:
void operator delete(void *)
但是,这些并不像运算符++那样是特殊的伪参数.它们只是通过额外参数调用new的一般规则的实例,例如:
obj = new(x,y,z) Object(a,b,c)
将生成隐式代码以清除构造函数错误,这些错误将那些相同的附加参数传递给operator delete,它将起作用(近似):
void *raw = operator new(sizeof(Object), x,y,z) try { obj = new(raw) Object(a,b,c); } catch(...) { operator delete(raw,x,y,z); throw; }
或者你是错误的记忆,或者你应该试着忘记它.析构函数没有参数,返回类型,它们不应抛出异常.