C++ 析构函数参数

C++ 析构函数参数,c++,parameters,destructor,C++,Parameters,Destructor,这篇文章讨论了重载析构函数 这就提出了一个问题:析构函数可以有参数吗 我从未使用过或见过带参数的析构函数。我想不出一个例子来说明为什么要将参数用于析构函数 没有。反正你也很少直接给他们打电话,那又有什么用呢 析构函数应该只销毁对象。不,答案很简单。这将使自动资源管理成为一个重要的问题,因为您必须担心析构函数采用了什么参数,以及从何处获取这些参数。如果出现异常,编译器如何知道传递析构函数的内容?C++0x草案n3290的§12.4节对析构函数作了如下说明: 析构函数 一种特殊的声明器语法,使用可选

这篇文章讨论了重载析构函数

这就提出了一个问题:析构函数可以有参数吗


我从未使用过或见过带参数的析构函数。我想不出一个例子来说明为什么要将参数用于析构函数

没有。反正你也很少直接给他们打电话,那又有什么用呢


析构函数应该只销毁对象。

不,答案很简单。这将使自动资源管理成为一个重要的问题,因为您必须担心析构函数采用了什么参数,以及从何处获取这些参数。如果出现异常,编译器如何知道传递析构函数的内容?

C++0x草案n3290的§12.4节对析构函数作了如下说明:

析构函数

一种特殊的声明器语法,使用可选函数规范(7.1.2),后跟~,后跟析构函数的类名,后跟空参数列表,用于在类定义中声明析构函数

(增加重点)


所以不,析构函数不接受参数。(2003年标准的措辞与上述段落完全相同。)

你能举个例子说明为什么析构函数应该有参数吗?你有没有阅读该问题公认答案中的FAQ链接?嗯。。。我认为析构函数的参数只有在有多种方法删除对象时才有用。我想偶尔也会出现这种情况(例如,在删除文件对象时,您可能需要指定是否立即将文件的缓冲区刷新到磁盘)。。。但无论如何,有更好的方法来处理这类事情。使用参数的析构函数与堆栈和成员对象结合使用会很尴尬(例如,当删除是隐式的时,您在哪里指定参数?@Gajet:我的问题之一。我从未见过任何需要析构函数参数的例子;虽然这并不能阻止某人提出一个例子或理由。@Mat:我不知道否定是一个链接。C++ FAQ声明析构函数不带任何参数,但我希望更多的引用或引用任何版本的标准。谢谢,这就是我所要寻找的。为什么人们会想要参数,安德列(Irc)曾经争论过一个可选的析构函数参数,这将告诉您对象是否由于异常处理而被销毁。这将允许更多用户安全范围保护对象,例如用于事务操作。有了这样的支持,客户机代码程序员就不必记得确保在作用域末尾调用了某些cancel()方法。分配和解除分配函数不遵循构造函数和析构函数的模式:分配函数可以有额外的参数(放置形式),如果是这样,那么必须有一个具有相同额外参数的相应释放函数。只有在施工失败时才会调用它。无法通过
delete
调用它。我一直想知道这种机制的意义是什么。我经常想向析构函数传递一个“环境”参数,但我不能,而且必须向这些类的每个实例添加一个“环境”指针成员,这是严重的内存浪费。@MooingDuck我也有同样的方法。编译器强制(用户)调用参数化构造函数的方法将使我免于很难调试的错误。对于包含必须调用正确结构的析构函数的结构的联合,析构函数如何。。。?删除默认构造函数并强制union的所有者调用正确的析构函数会很方便。(考虑至少有一个结构是非平凡的/包含唯一的\u ptr)。