class A
{
public:
A() = default;
A(const A&) = delete;
};
class A
{
public:
A() = default;
private:
A(const A&) = delete;
};
这两个定义在任何情况下总是相同吗?必须删除一个构造函数是否是私有的?
class A
{
public:
A() = default;
A(const A&) = delete;
};
class A
{
public:
A() = default;
private:
A(const A&) = delete;
};
这两个定义在任何情况下总是相同吗?必须删除一个构造函数是否是私有的?
它们不同只有生成的诊断。如果你把它private
,额外的和多余的访问违例报告:
class A
{
public:
A() = default;
private:
A(const A&) = delete;
};
int main()
{
A a;
A a2=a;
}
结果如下额外输出从GCC 4.8:
main.cpp: In function 'int main()':
main.cpp:6:5: error: 'A::A(const A&)' is private
A(const A&) = delete;
^
main.cpp:12:10: error: within this context
A a2=a;
^
因此,我的建议总是删除方法public
。
+1。我公开我的已删除函数,因为它是向公众用户发布的公告**,它不能被默认构建(在OP的情况下)。 – Nawaz
@Nawaz对,因此它也可以被认为是类的接口/文档的一部分。 –
我想扩展Daniel Frey's answer。而不是删除方法总是public
,我宁愿给这些方法访问修饰符你会(假设)给这些方法,如果他们不会被删除。 (我不喜欢总是的情况下,程序员有一个选项,如果它确实会在石头上,使删除方法public
,它应该由语言本身来执行雕刻。)
的拇指/准则某些规则:
public
在大多数情况下。public
在具体类大多数情况下。protected
抽象类。friends
在大多数情况下被实例化具体final
类private
。在任何情况下,您都会向类的相应用户发布通告,而不是某个类的所有用户。
我公开我的删除功能,因为它是**向公众用户发布的公告,它不能默认构建(在你的情况下)。 – Nawaz