c++ 析构函数参数

h7appiyu  于 2023-05-24  发布在  其他
关注(0)|答案(4)|浏览(152)

文章Are destructors overloadable?讨论了重载析构函数。
这就提出了一个问题:析构函数可以有参数吗?
我从来没有使用过或见过带参数的析构函数。我无法想出一个使用析构函数参数的理由的例子。

0s7z1bwu

0s7z1bwu1#

C++0x draft n3290的§12.4节对析构函数有这样的描述:

析构函数

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

  • (强调部分由作者标明)*

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

velaa5lx

velaa5lx2#

答案很简单,不可能。这将使自动资源管理成为一个非常棘手的问题,因为您必须担心析构函数接受哪些参数以及从哪里获取这些参数。那么在异常的情况下,编译器如何知道传递给你的析构函数的是什么呢?

2nc8po8w

2nc8po8w3#

不。你几乎从来不直接打电话给他们,所以有什么用呢。
析构函数应该销毁对象,仅此而已。

bxjv4tth

bxjv4tth4#

我认为带参数的析构函数有时候是有用的。想想PMR。当我们使用pmr容器时,例如std::pmr::vector<std::pmr::string>。在每个std::pmr::string中,它将存储一个指向pmr分配器的指针,然而,指针存储在std::pmr::vector中,我们不必将其存储在每个std::pmr::string中。如果我们可以将指针传递给std::pmr::string的析构函数,我们就不必存储它。
目前,我们还没有任何方法可以将参数传递给析构函数。顺便说一句,我们可以使用偏移量来获取参数(这种方法很难看,不能在实践中使用,如果有更好的方法,请让我知道)。这是一个example

相关问题