C++拷贝构造函数和赋值运算符

本文详细介绍了C++中的拷贝构造函数和赋值操作的区别,强调了何时调用拷贝构造和赋值操作。同时,深入探讨了深拷贝和浅拷贝的概念,指出浅拷贝可能导致多个对象共享同一块内存,而深拷贝则为指针数据成员分配新的内存。最后,提到了如何通过删除默认的拷贝构造函数和赋值运算符来防止不必要的拷贝行为。
摘要由CSDN通过智能技术生成

参考博客(一)
参考博客(二)
下面再写一些自己的总结吧
1、发生拷贝构造还是赋值操作,主要是看有没有产生新的对象,如果有新的对象产生,则调用的是拷贝构造函数,如果没有新对象产生,则调用的是赋值操作。
拷贝构造发生的场合:
1)函数传参是以值传递的方式。此时会调用拷贝构造函数创建一个可以使用的实参。
2)以值的方式作为函数返回值时。此时会调用拷贝构造函数创建一个temp对象,然后再返回这个temp对象。
3)使用一个对象给另一个对象进行初始化。

2、深拷贝和浅拷贝的区别
浅拷贝:完全是把一个对象的成员复制给拷贝对象,此时如果有数据成员是指针类型的,那原来的对象和拷贝后的对象的指针将指向同一片内存区域。
简单来说说,浅拷贝只是复制,不会开辟新的内存空间或者内存划分。
深拷贝:会给指针类型的数据成员开辟新的内存空间,此时源对象和拷贝后对象中指针类型的数据成员将指向不同的内存区域。

3、关于默认拷贝构造函数和默认赋值运算符
编译器会隐式的创建默认拷贝构造函数和赋值运算符,如果不需要,我们可以在代码中使用 delete 来删除。

class Person
{
public:

	Person(const Person& p) = delete;

	Person& operator=(const Person& p) = delete;

private:
	int age;
	string name;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值