Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将复制构造函数设置为private和=delete之间有什么区别?_C++ - Fatal编程技术网

C++ 将复制构造函数设置为private和=delete之间有什么区别?

C++ 将复制构造函数设置为private和=delete之间有什么区别?,c++,C++,我看过很多书推荐使用=delete,这就是它的意思吗?(使程序更具可读性)而不是说将复制构造函数设置为私有是件坏事? 思考你的答案 A类{ A(常数A&); //一些函数和变量 公众: //或者,您可以A(const A&)=删除; //做点什么 }; 这是一个相对较新的功能(在2011年版的C++中添加),其主要动机当然是可读性和意图的清晰性。然而,区别不仅仅是表面上的 请记住,对于类中声明的构造函数,没有任何东西可以阻止其他翻译单元实际提供定义。通常只在头文件中列出类的成员函数,并

我看过很多书推荐使用
=delete
,这就是它的意思吗?(使程序更具可读性)而不是说将复制构造函数设置为私有是件坏事? 思考你的答案

A类{
A(常数A&);
//一些函数和变量
公众:
//或者,您可以A(const A&)=删除;
//做点什么
};     

这是一个相对较新的功能(在2011年版的C++中添加),其主要动机当然是可读性和意图的清晰性。然而,区别不仅仅是表面上的


请记住,对于类中声明的构造函数,没有任何东西可以阻止其他翻译单元实际提供定义。通常只在头文件中列出类的成员函数,并在单独的.cpp中实现它们。如果有人从类内部使用复制构造函数,编译器将抱怨缺少定义(“对…的未定义引用”)。如果一个天真的程序员不知何故得出这样的结论:您忘记实现它是因为您从来都不需要它,那么他们可以继续这样做。突然间,你的类是可复制的,即使只是从它自己的成员函数(和朋友)中。
=delete
构造函数可以防止这种情况,编译器错误也会更好(通常是“由于复制构造函数被声明为已删除,因此无法复制对象”,而不是“未定义对…”的引用”或“A::A在此上下文中是私有的”)

您问的是 =删除< /COD>还是<代码> =默认?<代码> DEFALUT不是C++中的关键字。如果你的意思是
default
,那么这个问题没有太多意义(或者答案很快):一个具有不可访问副本的类是不可复制的,一个具有默认副本的类是不可复制的。你确定你的意思不是像原版那样删除吗?我糟糕的英语…我会修改我的问题。对不起,你的帖子中也有拼写错误。