C++对象指针浅拷贝和深拷贝


2017年12月7日,这是我在CSDN写的第一篇博客,写博客的目的也是对我知识进行查漏补缺,把我C++之路遇到的种种问题记录下来,让自己不能反同样的错误。

-------杂谈

浅拷贝和深拷贝

问题:近期在做算法实验的时候碰到一个关于类指针赋值的问题,简单的指针之间的赋值只是把两个指针指向同一个地址,而我需要把每次算法执行完的类指针push_back进vector储存每次算法迭代的结果,如果每次都是存入同一个指针,就会出现vector中的类指针都指向同一个地址,这就让我想到了能不能进行类指针之间的赋值,两个类指针之间内容相同,但是指针指向的地址都不同,就是两个不同的指针。


定义

浅拷贝:按照我的理解就是,两类之间发生数据成员的赋值,如果只是简单数据类型之间的赋值,浅拷贝完全能够胜任,但是碰到有指针的时候,两个类之间浅拷贝,那么两个对象中的指针会指向同一个地址,那么析构函数执行的时候就会发生错误(同一指针释放了两次)。

深拷贝:在浅拷贝的基础上对指针拷贝进行处理,让两个类指针中的指针指向不同的区域,这样两个类指针虽然内容想到,但是是存储在内存的不同区域。

下面是实验的代码

class rect
{
public:

	rect();
	rect(const rect *r);
	~rect();

private:
	int width, height;
	int *p;
};
rect::rect(const rect *r)
{
	width = r->width;
	height = r->height;
	p = new int;
	*p = *(r->p);
}

rect::rect()
{
	p = new int(100);
}

rect::~rect()
{
	if (p != NULL)
		delete p;
}
int _tmain(int argc, _TCHAR* argv[])
{
	rect *rect1;
	rect *rect2;
	rect1 = new rect;
	rect2 = new rect(rect1);

	return 0;
}
实验结果:

类指针和类内成员p指针都指向了不同的地址

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值