是否有一组“推荐”的删除我可以全局执行以提高类型安全性,例如防止表达式中的有符号到无符号转换?
不,您当然不能通过删除任何内容来阻止整数转换。
我是否应该默认删除我可以在所有课程中删除的所有 5 个操作?
不!删除的析构函数将无法销毁任何东西!
此外,删除移动构造函数很少有意义。如果您的类型可以廉价地移动,那么允许移动(例如,当按值返回对象时,或按值作为函数参数传递临时对象时)通常是一件好事,即使您不想允许复制。人为地限制该类型的用户移动它是有效的,这只是烦人的,并没有提供任何优势。
您似乎陷入了看到某个功能可用并认为应该使用它的陷阱。来自The Old Man and the C的以下引用似乎是相关的:
关于早期故事的最后一个轶事,其中有人使用了 int 参考参数。在讨论这篇论文时,程序员的评论是——“嗯,这个特性在语言中,所以我想我应该使用它。”。我们认为这不是使用 C++ 特性的充分标准。只有在可以证明它是有益的时候才应该使用一个特性。一座山被攀登“因为它在那里”。对于 C++ 特性,同样的情况不应该成立。它们的存在并不是使用的理由。
至于你的最后一个问题:
我可能会删除复制构造函数并添加一个单独的方法,该方法在我确实需要副本的极少数情况下复制对象。这是个好主意吗?
...也许...这可能是可以证明已删除的复制构造函数有用的情况。但我一般会说不,不要那样做,因为它很难将对象存储在容器中,例如。最好只仔细编写代码以避免不需要的副本。如果您没有这样做并且已经证明您确实在制作意外副本,那么可能会重新考虑删除复制构造函数。
但是你不应该仅仅因为你已经了解了这个特性就“默认”删除操作。它应该更常见,= default
而不是= delete
用于模拟一些非典型行为的类,例如资源的唯一所有权。