【发布时间】:2018-01-23 23:37:11
【问题描述】:
在旧版本的 C++ 中,如果想要阻止类对象的 copying,他们通常会在类的私有部分中声明 Copy Constructor 和 operator=(),如下所示:
class Foo {
public:
Foo(){} // Default
~Foo(){} // Default
private:
Foo( const Foo& c ); // not implemented
Foo& operator=( const Foo& c ); // not implemented
};
这很简单。现在有了更新版本的 C++,我们现在可以这样做了。
class Foo {
public:
Foo() = default;
~Foo() = default;
private:
Foo( const Foo& c ) = delete;
Foo& operator=( const Foo& c ) = delete;
};
然后我的问题变成了这样:使用将这些声明为 deleted 函数的现代方法,如果在其类的公共、受保护或私有部分中定义它们是否重要或有任何区别?
例如上面的和这个有什么区别:
class Foo {
public:
Foo() = default;
~Foo() = default;
Foo( const Foo& c ) = delete;
Foo& operator=( const Foo& c ) = delete;
};
编辑:
我接受了 ShadowRanger 的回答,因为他们通过示例进行了解释,并提供了指向此 Q/A 的链接,该链接清楚地解释了建议及其原因...
我注意到,在第一个示例中,当它们被声明为 private 时,您将在已经存在的 compiler errors 之上获得额外的 compiler errors,这些 compiler errors 在声明为 @987654332 时已经生成@。
【问题讨论】:
-
不是真的 imo 。
-
我认为没有;只是想澄清一下。我不想假设并且想要在设计类时编译器如何处理它的观点。
标签: c++ copy-constructor