何时/为什么我要显式删除我的构造函数?假设原因是为了防止其使用,为什么不做到呢private
?
class Foo
{
public:
Foo() = delete;
};
Run Code Online (Sandbox Code Playgroud)
谢谢!
Luc*_*ore 80
怎么样:
//deleted constructor
class Foo
{
public:
Foo() = delete;
public:
static void foo();
};
void Foo::foo()
{
Foo f; //illegal
}
Run Code Online (Sandbox Code Playgroud)
与
//private constructor
class Foo
{
private:
Foo() {}
public:
static void foo();
};
void Foo::foo()
{
Foo f; //legal
}
Run Code Online (Sandbox Code Playgroud)
它们基本上是不同的东西.private
告诉你只有类的成员可以调用该方法或访问该变量(或当然是朋友).在这种情况下,static
该类(或任何其他成员)的方法调用private
类的构造函数是合法的.这不适用于已删除的构造函数.
这里有样品.
为什么显式删除构造函数?
另一个原因:
我delete
想确保使用初始化程序调用类时使用。我认为这是无需运行时检查即可实现的非常优雅的方法。
C ++编译器会为您执行此检查。
class Foo
{
public:
Foo() = delete;
Foo(int bar) : m_bar(bar) {};
private:
int m_bar;
}
Run Code Online (Sandbox Code Playgroud)
这是非常简化的代码,确保没有这样的实例化:Foo foo;
归档时间: |
|
查看次数: |
46684 次 |
最近记录: |