文章内容基于《深度探索C++对象模型》P48~60整理得到,掺杂个人理解,如有错误,敬请斧正!
还可结合我另一篇博客一起看:Default Constructor什么时候才会被编译器生成出来呢?
原文:“和default constructor一样,copy constructor也是在‘必要的时候’才由编译器产生出来。……就像default constructor一样,C++ Standard上说,如果class没有声明一个copy constructor,就会有隐式的声明或隐式的定义出现。和以前一样,C++ Standard把copy constructor区分为trivial和nontrivial两种。只有nontrivial的实例才会被合成于程序之中。决定一个copy constructor是否为trivial的标准在于class是否展现出所谓的‘bitwise copy semantics’。”
换言之:结合前后文可知,“必要的时候”指的是“当class不展现bitwise copy semantics”。此时编译器才会在执行copy操作时,生成一个nontrivial copy constructor。而“展现出bitwise copy semantics”时,copy操作可以由编译器完成,而不需要一个copy constructor。
那么我们的关注点应该是:什么是所谓的“bitwise copy semantics”?什么时候不展现“bitwise copy semantics”?