为什么编译器提供默认拷贝构造函数
我想知道为什么编译器提供了默认的拷贝构造函数。这个想法背后的策略是什么。
提前致谢。
从一个相关的(但不是相同的)问题 - 为什么C ++编译器不定义运算符==和运算符!= ?:
Stroustrup在“C ++的设计和发展”(第11.4.1节 - 复制的控制)中对默认的拷贝构造函数进行了说明:
我个人认为不幸的是复制操作是默认定义的,我禁止复制许多课程的对象。 但是,C ++从C继承了它的默认赋值和拷贝构造函数,并且它们经常被使用。
所以答案是它被Stroustrup勉强包括在内,以便向后兼容C(可能是大多数C ++的疣的原因,但也可能是C ++受欢迎程度的主要原因)。
出于我自己的目的,在我的IDE中,我用于新类的代码段包含一个私有赋值运算符和复制构造函数的声明,这样当创建一个新类时,我不会获得默认赋值和复制操作 - 我必须显式删除声明如果我希望编译器能够为我生成这些操作,请从private:部分执行这些操作。
从C ++编程语言,第11.3.4节复制
...对于默认拷贝构造函数具有正确语义的类型,我宁愿依赖于该默认值。 它比我写的任何东西都要冗长,人们应该理解默认值。 此外,编译器知道默认及其可能的优化机会。 而且,对于有许多数据成员的类,用手写出成员副本是很乏味和容易出错的。
基本上,我读到,由于默认的拷贝构造函数可以节省您的工作量,因此可以避免由乏味造成的错误,还可以通过消除手动优化(通过让编译器执行此操作)的诱惑来优化代码。
否则,当你通过值传递实例时,编译器如何生成一个实例?
链接地址: http://www.djcxy.com/p/73765.html上一篇: Why compiler provides default copy constructor
下一篇: c++