如何制作此构造函数的深层副本
How to make a deep copy of this constructor?
我做了这个构造函数,我需要做一个深层的副本。 我真的不明白深副本的含义。我知道它会独立复制具有自己的动态内存的对象,但我不明白这样做需要什么。 我也不确定如何实际实现深层复制。 有什么建议吗?
这是我需要制作深度复制的构造函数:任何人都可以提供一些语法帮助,比如骨架?
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 文章。
可以从游戏中举一个例子。假设您有一个策略游戏,敌方士兵具有个人属性,例如盔甲、生命值等。假设游戏从文本文件中读取这些属性,并在每次创建敌方士兵时分配这些属性。与其一次又一次地从文本文件中读取所有信息或将文本文件保存在内存中(通常比其对象形式大(,不如拥有一个原型对象池,这些对象是在加载阶段从同一文本文件创建的,可能是一个更好的解决方案。当需要敌方士兵时,可以通过将原型对象传递给新对象的构造函数或以工厂模式来创建它。在构造函数(或工厂类(中,您肯定需要一个深层副本,并且要小心,创建所有对象,而不是为具有单个对象分配指针。
相关文章:
- 如何从构造函数副本 T(const T&)调用对象 T?
- 当类型适当的构造函数可用时,为什么一个编译器尝试使用已删除的副本构造函数
- 复制构造函数生成旧数组的错误副本
- 复制构造函数和运算符"="他们没有打印列表 l 的副本
- 是否可以编写便于副本初始化的显式构造函数
- 该代码调用副本或移动构造函数
- 我应该声明我的异常的副本构造函数noexcept吗
- 复制构造函数不起作用,无法修改副本
- C++中的构造函数副本、列表、指针和模板
- 具有未定义参数的私有副本构造函数
- 构造函数初始化列表中的 C 结构副本C++
- 使用函数中的复制构造函数创建实例的副本,该函数获取作为基对象传递的实例
- 错误的数组初始化与赋值副本构造函数初始化
- 如何制作此构造函数的深层副本
- 为二进制搜索树副本构造函数编写辅助函数
- 使用已删除的副本构造函数和初始值设定项列表重载调用类定义中的成员构造函数
- 模拟虚拟副本构造函数
- 模板化构造函数可以代替已删除的副本构造函数吗
- 在编译器生成的副本构造函数之上强制使用模板化构造函数
- 了解虚拟副本构造函数