3

我制作了这个构造函数,我需要对其进行深层复制。我真的不明白深拷贝的含义。我知道它会生成具有自己动态内存的对象的独立副本,但我不明白对此有何需求。我也不确定如何实际实现深拷贝。有什么建议么?

这是我需要对其进行深度复制的构造函数: 任何人都可以提供一些语法帮助,例如骨架吗?

template<class t_type>
inline ALIST<t_type>::ALIST()
{
  t_type value;
  capacity=10;  
  DB = new t_type[capacity];
  count=capacity;

  cout<<"Enter value: ";
  cin.clear();
  cin>>value;


  for(int i=0; i<capacity; i++)
  {
    DB[i]=value;
  }
}
4

3 回答 3

4

什么是复制和交换成语?

使用深层副本,以便您可以复制对象拥有的所有信息,然后在不更改原始文件的情况下更改副本。广义上讲,浅拷贝只会复制指针本身,但仍然指向相同的信息。如果您不小心,这可能会导致数据发生意外更改。

于 2012-05-20T21:35:02.390 回答
3

仔细阅读 Stroustrup 的演示幻灯片 #14 和 #15

深拷贝:复制指针及其指向的内容,这样两个指针现在都指向一个不同的对象

  • 什么向量,字符串等做什么
  • 需要容器类的复制构造函数和复制赋值

基本上,这归结为:正确有效安全地管理您的指针。您可能还想查看复制和交换习语和 Sutter 的 GOTW 文章,内容涉及异常安全类设计异常安全异常安全函数调用

于 2012-05-20T21:39:26.260 回答
1

可以从游戏中给出一个例子。假设您有一个策略游戏,敌方士兵具有个人属性,例如盔甲、生命值等。假设游戏从文本文件中读取这些属性,并在每次创建敌方士兵时分配这些属性。而不是一次又一次地从文本文件中读取所有信息或将文本文件保存在内存中,这通常比它的对象形式大,有一个原型对象池,它们是在加载阶段从同一个文本文件创建的,可能是更好的解决方案。当需要一个敌方士兵时,您可以通过将原型对象传递给新对象的构造函数或以工厂模式从原型对象创建它。在构造函数(或工厂类)中,您肯定需要深拷贝并小心,

于 2012-05-20T21:51:01.160 回答