C++ 第二章 浅拷贝与深拷贝 浅拷贝bug

拷贝构造函数
首先,我们的目标是拿B初始化A
在这里插入图片描述
第一种方法,我们直接给=了在这里插入图片描述
第二种,我们创建一个C,然后把B给扔进去
然后我们再打印C

> class FTestA :public FHello_F{
public:
	FTestA();
	FTestA(int Ina, int intb, int inc);
	~FTestA();
public:
	int a;
	int b;
	int c;
	FTest3* T3;
};
FTestA::FTestA() {
	a = 11;
	b = 13;
	c = 9;
	T3 = new FTest3();

}FTestA::FTestA(int Ina, int intb, int inc):FHello_F(),a(Ina),b(intb),c(inc)
{
	a = Ina;
	b = intb;
	c = inc;
	T3 = new FTest3();
}

FTestA::~FTestA()
{
	if (T3) {
		delete T3;
		T3 = nullptr;
	}
}
const FTestA* TsetA = NULL;

void main() {
	{
		TsetA = new FTestA();
		TsetA = new FTestA();
		 
		FTestA A;
		std::cout << A.a << A.b << A.c << endl;
		FTestA B(1, 2, 3);

		//A = B;
		FTestA C(B);
		std::cout << C.a << C.b << C.c << endl;
}

FTestA C(B);//浅拷贝,它将变量作了内存对齐的赋值,它只会对当前的值进行拷贝
深拷贝
深拷贝是什么意思呢?
在我们进行析构的时候,首先我们会调用当前的析构,那么在第一次析构的时候,就已经把当时的指针给清除了,干掉了,那么在拷贝完过后,第二个赋值过去的B,它是还要对这个指针指向的地址再析构一次的,这个时候就会产生崩溃
在这里插入图片描述
解决方法
在这里插入图片描述
在这里插入图片描述
需要注意的是这样的方法要保证,在FTest3中不能有指针,如果有指针的话必须在里面再进行一次深拷贝
需要加*,不能用指针对指针的赋值,因为这样的方法只是指针指向另外一个具体的内存,所以它的赋值方式得加个*,将他们变成具体的对象,然后对象与对象之间浅拷贝把我们的值拷贝在里面

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值