C++深拷贝和浅拷贝的区别
C++深拷贝和浅拷贝的区别
#include <iostream> #include<cstring> using namespace std; class student { public: student(const char* name, int age);//声明构造函数 ~student();//析构函数 //如果没有定义拷贝构造函数,编译器就自动生成默认拷贝构造函数:浅拷贝 /* student(student& a) { this->name = a.name; this->age = age; }*/ //自定义的拷贝构造函数:深拷贝 student(student& a) { cout << __FUNCTION__ << endl; this->name = new char[256]; this->age = a.age; } private: char* name; int age; }; student::student(const char* name, int age = 0) { //定义构造函数 cout << "//定义构造函数" << endl; } student::~student() { //定义析构函数 cout << "//定义析构函数" << endl; delete[]name; } int main() { student myname("zhang",13); }
控制台结果:
什么时候需要自己定义拷贝构造函数?
当类数据成员中有指针成员的时候,需要申请内存空间。
深拷贝和浅拷贝的区别?
浅拷贝:只拷贝对象本身空间的内容,公用一个空间内存,
深拷贝:拷贝对象本身空间的内容,同时还分配指向的堆空间。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现