看一下我的一些旧代码,我发现出于笨拙,我定义了一个像这样的析构函数:
~ResourceManager(void);
Run Code Online (Sandbox Code Playgroud)
这不仅可以编译,而且可以按预期工作.我当然改变了
~ResourceManager();
Run Code Online (Sandbox Code Playgroud)
但是我太快重构了吗?第一个版本是正确的还是好的C++风格?
由于问题已经结束,并且没有任何机会进行适当的消除歧义,因此我应该从解决这个问题的标准中提出相关的引用,当析构函数被放入透视图时
12.4析构函数
- 使用可选函数说明符(7.1.2)后跟〜后跟析构函数的类名后跟空参数列表的特殊声明符语法用于在类定义中声明析构函数.在这样的声明中,〜后跟析构函数的类名可以包含在可选的括号中; 这样的括号被忽略了.在析构函数声明的声明符中,不应将typedef-name用作〜之后的类名.
因此标准要求空参数列表.也许向后兼容自由函数的 C实践(f(void)
声明空参数列表的方式)在实现中将析构函数与它们一起使用,但它肯定似乎不是有效的C++.
这是来自C的残余.在C中,空参数列表并不意味着不带参数的函数,而是具有未指定数量的参数的函数.在C++ foo(void)
中不推荐使用,并且foo()
是首选,因为它特别指的是不带参数的函数.你的析构函数也是如此.虽然这两行代码是等价的,但您应该更喜欢该~ResourceManager()
版本.