在我们公司的编码标准中,我们被告知“要知道可以防止(意外)复制的方法”。
我不太确定这是什么意思,但假设他们的意思是我们应该停止复制类,如果这不是必需的。
我所能想到的是:
我在正确的轨道上吗?有没有什么我可能遗漏的?
发布于 2009-08-27 09:34:18
是的,将赋值运算符和复制构造函数设置为私有将阻止您使用standart方法创建对象的任何副本(但如果您确实需要对象的副本,则可以实现,例如,Copy()方法,它将执行深度复制)。
更新 (re to Tal Pressman):
...you应该意识到这些事情,并注意不要意外地复制了不应该复制的对象。
好吧,我假设,任何意外的复制都将使用赋值操作符或复制构造函数来执行。因此,将它们设置为私有实际上是有意义的:如果对象复制是代价高昂的操作,那么复制必须是显式的:其他开发人员可以无意中间接调用copy op,编译器会通知他,这是被禁止的。
发布于 2009-08-27 09:31:23
如果您正在使用boost,那么防止类被复制的最简单方法是从noncopyable派生您的类
#include <boost/noncopyable.hpp>
class Foo : private boost::noncopyable
{
}
它使您的意图比手动将复制构造函数和赋值运算符设置为私有更清晰,并且具有相同的结果。
发布于 2009-08-27 09:39:04
你在正确的轨道上。如果您不想使用boost,您可以执行以下操作:将复制构造函数和复制赋值运算符设置为私有,并且不实现它们。因此,如果你试图复制一个实例,你会得到一个编译器错误。
https://stackoverflow.com/questions/1339922
复制相似问题