C FAQ Cline,Lomow:
When the compiler synthesizes the copy constructor,it makes them inline. If your classes are exposed to your customers ( for example,if your customers #include your header files rather than merely using an executable,built from your classes ),your inline code is copied into your customers executables. If your customers want to maintain binary compatibilty between releases of your header files,you must not change an inline functions that are visible to the customers. Because of this,you will want an explicit,non inline version of the copy constructor,that will be used directly by the customer.
解决方法
例如您不希望重新编译操作系统上的一半软件,因为您更新了一些低级库,所有内容都以不兼容的方式使用(并考虑安全更新的频率).即使你想要,你甚至可能都没有所需的所有源代码.
要使动态库的更新兼容,并且实际上有效,您基本上无法更改公共头文件中的任何内容,因为那里的所有内容都直接编译到其他二进制文件中(即使在C代码中,这通常也包括结构大小)和成员布局,显然你不能删除或更改任何函数声明).
除了C问题之外,C还引入了更多(虚函数的顺序,继承如何工作等),因此可以想象你可以做一些改变自动生成的C构造函数,复制,析构函数等的东西,同时保持兼容性.如果它们与类/结构一起定义为“内联”,而不是在源代码中明确定义,那么它们将直接包含在链接动态库并使用这些自动生成的函数的其他应用程序/库中,并且它们不会得到您的更改版本(您可能甚至没有意识到已经改变了!).