【发布时间】:2017-04-06 04:34:50
【问题描述】:
考虑以下类:
struct S { ~S() = delete; };
简而言之,出于问题的目的:我无法创建 S 的实例,例如 S s{};,因为我无法销毁它们。
正如 cmets 中提到的,我仍然可以通过 S *s = new S; 创建一个实例,但我也不能删除它。
因此,我可以看到删除的析构函数的唯一用途是这样的:
struct S {
~S() = delete;
static void f() { }
};
int main() {
S::f();
}
也就是说,定义一个只公开一堆静态函数的类,并禁止任何尝试创建该类的实例。
已删除的析构函数还有哪些其他用途(如果有)?
【问题讨论】:
-
在这种情况下当然可以创建
S的实例,只需使用new S -
@skypjack 即使删除了析构函数,您也可以使用placement-new 创建(和删除)。也许这可能有一些用途,您希望全局对象管理不同的子对象并且您不希望这些子对象存在于容器之外......
-
也就是说,定义一个只公开一堆静态函数的类,并禁止任何尝试创建该类的实例。又名命名空间?
-
@Borgleader 事实上,我可以用另一种方式做到这一点,这里有什么帮助?我不是要求替代方法,我已经知道它们,我只是想知道
destructor = delete;的用途是什么。 -
@Borgleader 具有静态方法的对象可以被模板化,命名空间不能。
标签: c++ c++11 destructor