通常使重量级课程不可复制是一种好习惯吗?

Emi*_*ier 1 c++ noncopyable

我有一个包含潜在的顶点的Shape类,我正在考虑将copy-constructor/copy-assignment设为私有,以防止意外不必要地复制我的重量级类(例如,通过值而不是通过引用传递).

要制作Shape的副本,必须故意调用"克隆"或"复制"方法.

这是好习惯吗?我想知道为什么STL容器不使用这种方法,因为我很少想通过值传递它们.

Eli*_*sky 7

限制用户并不总是一个好主意.只记录复制可能很昂贵就足够了.如果用户确实想要复制,那么通过提供复制构造函数来使用C++的本机语法是一种更清晰的方法.

因此,我认为真正的答案取决于背景.也许不应该复制你正在写的真正的类(不是想象的形状),也许它应该被复制.但作为一种通用的方法,我当然不能说人们应该阻止用户通过强制他们使用显式方法调用来复制大对象.