Java复制构造函数实例分析
发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,这篇"Java复制构造函数实例分析"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"Ja
千家信息网最后更新 2025年11月10日Java复制构造函数实例分析
这篇"Java复制构造函数实例分析"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"Java复制构造函数实例分析"文章吧。
题目:以下整型数组类的定义中每个函数有且只有一处错误,找出并改正
class ArrayInt {public: ArrayInt(const int *pArray, int size) : m_nSize(size) { assert(size > 0); for (int i = 0; i < size; ++ i) m_pArray[i] = pArray[i]; } ArrayInt(const ArrayInt &iCopy):m_nSize(iCopy.m_nSize),m_pArray(iCopy.m_pArray){} ~ArrayInt() { delete m_pArray; } int operator[](short index) { assert(index < m_nSize); return m_pArray[index]; } const ArrayInt & operator=(const ArrayInt & iCopy) { assert(m_nSize >= iCopy.m_nSize); for (int i = 0; i < m_nSize; ++ i) m_pArray[i] = iCopy.m_pArray[i]; }private: short m_nSize; int * m_pArray;};分析:以上错误均为C++中最基础知识,也是最易让人迷惑的一部分,有关复制构造函数要注意的一点是深复制和浅复制的问题。针对以上函数的每一问题描述如下:
1、构造函数内部没有分配空间便开始赋值;
2、复制构造函数为浅复制,造成两个对象会共用一块内存
3、析构函数内部应删除数组内存,并将指针赋值为空
4、中括号操作符函数下标越界检验不完全,当index为负值时,程序崩溃
5、赋值操作符函数无返回值,返回值的作用是为了连续赋值a = b = c;
程序改正如下:
class ArrayInt {public: ArrayInt(const int *pArray, int size) : m_nSize(size) { assert(size > 0); m_pArray = new int[size]; for (int i = 0; i < size; ++ i) m_pArray[i] = pArray[i]; } ArrayInt(const ArrayInt & iCopy) { //ArrayInt(iCopy.m_pArray, iCopy.m_nSize); m_nSize = iCopy.m_nSize; assert(m_nSize > 0); m_pArray = new int[m_nSize]; for (int i = 0; i < m_nSize; ++ i) m_pArray[i] = iCopy.m_pArray[i]; } ~ArrayInt() { if (m_pArray) { delete[] m_pArray; m_pArray = NULL; } //printf("distructor is called\n"); } int operator[](short index) { assert(index < m_nSize && index >= 0); return m_pArray[index]; } const ArrayInt & operator=(const ArrayInt & iCopy) { if (this == &iCopy) return *this; assert(m_nSize >= iCopy.m_nSize); for (int i = 0; i < iCopy.m_nSize; ++ i) m_pArray[i] = iCopy.m_pArray[i]; return *this; }private: short m_nSize; int * m_pArray;};说明:在复制构造函数中,试图调用构造函数来实现深复制的尝试是不可行的,原因是,如此会在构造函数中生成一个匿名对象,复制构造函数调用完毕后,该对象析构(通过在析构函数中打印字符即可验证),所以并没有如想象中的一样实现了深复制,匿名对象是实现了深复制的。所以,在外部访问调用复制构造函数的对象的数据成员时,会报错。
测试函数如下:
void test_construct_copy() { int pArray[] = {1, 2, 3, 5}; ArrayInt arr(pArray, sizeof pArray / sizeof(int)); printf("%d \n", arr[2]); ArrayInt arr2(arr); printf("%d \n", arr2[2]); pArray[2] = 8; ArrayInt arr3(pArray, 4); printf("%d \n", arr3[2]); arr3 = arr2; printf("%d \n", arr3[2]); pArray[2] = 10; ArrayInt arr4(pArray, 4); arr3 = arr2 = arr4; printf("%d \n", arr3[2]);}以上就是关于"Java复制构造函数实例分析"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。
函数
内容
对象
分析
实例
实例分析
知识
内存
操作符
数组
文章
程序
篇文章
错误
问题
下标
两个
价值
作用
原因
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
打印机ntp服务器
内网服务器映射到公网上的ip
委内瑞拉网络安全问题
软件开发要打字快吗
江苏常熟网络安全技术支撑单位
和平精英海岛服务器怎么找
应用服务器怎么查询
科技发展与互联网
校园网络安全 标语
小程序开发app软件开发
柳州简创网络技术有限公司
互联网科技有限公司造车
天剑外传3d福利版服务器
维护网络安全的价值
海尔scrm大数据库
杭州仕天网络技术有限公司
数据库备份是在哪里备份
海南商业软件开发预算
软件开发师是属于行业
智悦网络技术有限公司
打印机ntp服务器
网络安全专业是怎么样的
数据库与服务器密码是一样的吗
数据库 社团
云浮市软件开发招聘
网易实况足球服务器查询
vba数据录入数据库有重复提醒
网络安全天才郑海为
戴尔m910刀片服务器图解
mysql数据库教材课后习题