删除C++中的构造函数:私有/受保护/公共?

问题描述 投票:0回答:1

在 C++ 中删除构造函数的最佳实践是什么:将其放在 private/protected/public 中?:

方法一:

class Foo{
public:
Foo() = delete;
}

方法2:

class Foo{
protected:
Foo() = delete;
}

方法3:

class Foo{
private:
Foo() = delete;
}
c++11 c++17 c++14
1个回答
0
投票
函数声明中的

delete
是在C++11中引入的,参见这里。其目的是禁用某个函数并表明该函数未定义和/或不使用。

delete
之前(即C++11),通过将函数设为私有来完成相同的任务。当然,如果派生类可以使用它,则
protected
也可以。但我知道的例子不希望这样的函数在任何地方使用,并将其声明为私有。

我的回答是一种意见,但我不会混合两种风格。我会使用

delete
或将函数设为私有(或受保护) - 但不会像您的一些示例中那样同时使用。所以我更喜欢方法 1。

我也会使用

delete
而不是 private 的技巧,除非你需要你的代码在具有旧标准的旧编译器上运行。
delete
对于用户来说是不言自明且干净的。

© www.soinside.com 2019 - 2024. All rights reserved.