如何制作此构造函数的深层副本

How to make a deep copy of this constructor?

本文关键字:副本 构造函数 何制作      更新时间:2023-10-16

我做了这个构造函数,我需要做一个深层的副本。 我真的不明白深副本的含义。我知道它会独立复制具有自己的动态内存的对象,但我不明白这样做需要什么。 我也不确定如何实际实现深层复制。 有什么建议吗?

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

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;
  }
}

什么是复制和交换成语?

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

特别是浏览Stroustrup的演示幻灯片#14和#15

深度复制:复制指针及其指向的内容,以便两者 现在每个指针都引用一个不同的对象

  • 向量、字符串等的作用
  • 需要复制构造函数和复制 容器类的赋值

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

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