析构函数参数

发布于 2024-11-13 15:35:21 字数 188 浏览 2 评论 0原文

文章析构函数是否可重载?讨论了析构函数的重载。

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

我从未使用过或见过带参数的析构函数。我无法举出在析构函数中使用参数的示例。

The article Are destructors overloadable? talks about overloading the destructor.

This raised a question: Can a destructor have parameters?

I've never used or seen a destructor with parameters. I could not come up with an example of a reason to use parameters to the destructor.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

夏至、离别 2024-11-20 15:35:21

C++0x 草案 n3290 的第 §12.4 节对析构函数有这样的说法:

析构函数

使用可选函数说明符(7.1.2)后跟 〜 后跟析构函数的类名,后跟空参数列表的特殊声明符语法用于在类定义中声明析构函数.

(添加了强调)

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

Section §12.4 of C++0x draft n3290 has this to say about destructors:

Destructors

A special declarator syntax using an optional function-specifier (7.1.2) followed by ˜ followed by the destructor’s class name followed by an empty parameter list is used to declare the destructor in a class definition.

(emphasis added)

So no, destructors do not take parameters. (The 2003 standard has the exact wording of the above paragraph.)

筑梦 2024-11-20 15:35:21

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

No, is the simple answer. This would make automatic resource management a significant bitch, because you'd have to worry about what parameters the destructor took and where the hell you were going to get them from. What about in the case of exception- how would the compiler know what to pass your destructor?

罗罗贝儿 2024-11-20 15:35:21

不,反正你几乎不会直接打电话给他们,那有什么用呢?

析构函数应该销毁对象,仅此而已。

No. You hardly ever call them directly anyway, so what would be the use.

The destructor is supposed to destroy the object, nothing more.

一腔孤↑勇 2024-11-20 15:35:21

我认为带参数的析构函数有时是有用的。
想想pmr。当我们使用 pmr 容器时,例如 std::pmr ::向量。在每个std::pmr::string中,它都会存储一个指向pmr分配器的指针,但是,该指针存储在std::pmr::vector中,我们不必将其存储在每个 std::pmr::string 中。如果我们可以将指针传递给 std::pmr::string 的析构函数,那么我们就不必存储它。

目前,我们没有任何方法将参数传递给析构函数。顺便说一句,我们可以使用 offset 来获取参数(这种方式很难看,在实际中无法使用,如果有更好的方法,请告诉我)。这是一个示例

I think a destructor with parameters is usable in sometimes.
Think about pmr. When we use pmr containers, for example, std::pmr::vector<std::pmr::string>. In every std::pmr::string, it will store a pointer to pmr allocator, however, the pointer is stored in the std::pmr::vector, we don't have to store it in every std::pmr::string. If we can pass the pointer to std::pmr::string's destructor, we don't have to store it.

At current, we don't have any way to pass paramters to destructor. BTW, we can use offset to get parameter (this way is ugly and cannot be used in practice, if there are any better way, please let me know). Here is an example.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文