[英]Why not a consolidated Copy constructor and Assignment operator available in C++?
[英]Why would I make copy constructor and assignment operator private and implemented in C++?
我的猜测是,这对于持有自己列表的类很有用 - 然后它可以在内部复制实例。 这实际上只对作为项和容器的类有用:
class MyItems
{
private:
/* Copy ctor and =operator */
List list;
public:
void AddItems(MyItems* items)
{
MyItems* added = new MyItems(items);
list.Add(added);
}
};
另一个想法是允许在班级控制的情况下进行克隆。 当复制有意义时,这可能很有用,但仅限于特定条件或权限:
class MyClass
{
private:
/* Copy ctor and =operator */
public:
MyClass* clone()
{
if (canClone)
{
MyClass* cloned = new MyClass(this);
return cloned;
}
else
{
return NULL;
}
}
};
有两种情况立即浮现在脑海中:
friend
:
比方说,作为你设计的一部分,你有两个高度耦合的类,其中一个需要能够复制另一个(比如,在工厂模型或其他类似),但你不想让整个世界成为能够复制它。
包装:
假设您希望能够有条件地克隆某些元素,具体取决于某些内部行为(例如,取决于某些类状态条件) - 从语言角度来看,最简洁的方法仍然是将复制分离为自己的函数。 这样可以很好地分离关注点。
operator =
未实现,以便即使是friend
也无法访问它。 如果您实施,则意味着您希望friend
有权访问。 这是一个设计决定。 例如
class A {
A(const A& obj) { ... }
A& operator = (const A& obj) { ... }
public:
A& clone(const A& obj)
{
*this = obj;
return *this;
}
};
我们已经使用这个包装器clone()
来允许用户进行克隆,但是它也明确地显示了他/她正在做什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.