Joh*_*ohn 4 c++ class-design copying
一位同事正在清理几个图书馆.在这样做的过程中,他一直在阅读C++的API设计,并讨论如何在C++类中显式启用或禁用复制.这与Sutter和Alexandrescu在他们的C++编码标准中所说的相同.
他同意应该遵循这个建议,但是这两本书似乎都没有说明什么是指示何时启用或禁用的指导原则.
任何指导方式都是这样或那样的?谢谢!
它取决于类在应用程序中扮演的角色.除非该类代表一个值,在身份不重要的情况下,您应该禁止复制和分配.同样,如果类是多态的.作为一般规则,如果您动态分配类类型的对象,则它不应该是可复制的.相反,如果类是可复制的,则不应动态分配它的实例.(但也有一些例外情况,即使语义反正,动态分配并避免复制大对象也并不罕见.)
如果您正在设计一个低级库,那么选择就不太清楚了.类似的东西std::vector可以在应用程序中扮演很多角色; 在大多数情况下,复制是不合适的,但禁止复制会使其在适当的少数情况下无法使用.
不可复制的类应该是例外,而不是规则.当且仅当您在复制时不能保留值语义时,您的类应该是不可复制的 - 例如,命名的互斥锁,唯一所有权指针.否则,你的课程应该是可复制的.许多C++库依赖于可复制性,特别是在C++ 0x之前,它们无法移动.
与DeadMG相反,我相信大多数课程都应该是不可复制的.
以下是Stroustrup在他的"C++的设计和演变"一书中所写的内容:
"我个人认为不幸的是,默认情况下定义了复制操作,我禁止复制我的许多类的对象"