当前位置:  开发笔记 > 编程语言 > 正文

使用伪参数的C++类成员函数

如何解决《使用伪参数的C++类成员函数》经验,为你挑选了2个好方法。

我知道你可以使用一个虚拟的"int"参数operator++operator--覆盖这些运算符的后缀版本,但我隐约回想起一些你可以在析构函数上声明的虚拟参数.有谁知道这件事,如果有的话,那个虚拟参数做了什么?

这是我在我十几岁时(即很久以前)读过的旧Turbo C++教程书籍,所以我可能会完全记错了.这也是非常早期的C++,在它被标准化之前,所以它可能是特定于Turbo C++的东西.



1> puetzk..:

您可能正在考虑具有签名的操作员删除的放置和非搬运形式:

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;
}



2> David Nehme..:

或者你是错误的记忆,或者你应该试着忘记它.析构函数没有参数,返回类型,它们不应抛出异常.

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有