深拷贝和浅拷贝
- 没有提供任何构造函数的时候,系统默认生成构造和析构函数。
- 当需要使用拷贝构造函数是,系统默认生成拷贝构造函数,是内存拷贝。
class seqStack {
private:
int* _pstack;
int _size;
int _top;
public:
seqStack(int size) {
_size = size;
_pstack = new int[size];
_top = -1;
}
~seqStack() {
delete[]_pstack;
_pstack = nullptr;
}
};
int main() {
seqStack s1(10);
seqStack s2 = s1;
}
- 对象如果占用外部资源,浅拷贝会出现问题,应转为深拷贝。
- 深拷贝:不仅做内存拷贝,还做外部资源的内容拷贝。
class seqStack {
public:
seqStack(int size) {
_size = size;
_pstack = new int[size];
_top = -1;
}
~seqStack() {
delete[]_pstack;
_pstack = nullptr;
}
seqStack(const seqStack &seq) {
_pstack = new int[seq._size];
for (int i = 0; i <= seq._top; i++) {
_pstack[i] = seq._pstack[i];
}
_size = seq._size;
_top = seq._top;
}
void operator=(const seqStack& seq) {
if (this == &seq)
return;
delete[] _pstack;
_pstack = new int[seq._size];
for (int i = 0; i <= seq._top; i++) {
_pstack[i] = seq._pstack[i];
}
_size = seq._size;
_top = seq._top;
}
};
int main() {
seqStack s1(10);
seqStack s2(s1);
seqStack s3 = s1;
s3 = s1;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)