#include "iostream"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
using namespace std;
//浅拷贝的问题和问题解决
//深拷贝的应用场景,解决浅拷贝的出现
class NAME1
{
private:
int a;
char *q;
public:
NAME1 (const char *p)
{
int len=strlen(p);//查长度
q=(char *)malloc(len+1);
strcpy(q,p); //地址传递
}
//深拷贝,手工编写构造函数,使得内存奔溃危机解除
NAME1(const NAME1& a)
{
int len=strlen(p);//查长度
q=(char *)malloc(len+1);
strcpy(q,p); //地址传递
}
~NAME1()
{
free(q);
q=NULL;
a=0;
}
protected:
};
int main()
{
NAME1 n1("adafds");//先创立的对象,后释放
NAME1 n2=n1;//浅拷贝的问题出现,因为默认构造函数传递的地址,所以会存在析构多次产生内存奔溃的问题
n2=n1;//c++提供的等号操作也是浅拷贝
system("pause");
return 0;
}
c++学习记录_03.05
最新推荐文章于 2025-03-05 14:56:18 发布
本文通过C++代码示例,详细解释了浅拷贝存在的问题及其导致的内存崩溃风险,同时介绍了如何实现深拷贝来解决这些问题,确保程序的稳定运行。

86

被折叠的 条评论
为什么被折叠?



