欢迎光临散文网 会员登陆 & 注册

Effective C++ 第五条 Know what functions C++ silently writes and ca

2023-01-09 00:49 作者:九思519  | 我要投稿


当你创建一个类(哪怕是空类),C++会为你创建三个默认函数,构造函数、拷贝构造函数、析构函数,这些函数都是public且inline的,只有当这些函数被调用才会被编译器创建出来。

这里有个要点需要注意,编译器自动产生的拷贝构造函数可能会引发内存泄漏(深拷贝浅拷贝),例子如下

如果按照这些执行,代码会报错,原因是编译器的默认拷贝构造函数是浅拷贝,也就是a2中的p并不是独立于a1中的p,而是a1.p和a2.p指向同一个位置,当这个位置被a1的析构函数释放掉之后,这块内存也就被释放了,但是a2.p仍然指向这个位置,这就导致a2的析构函数会再一次释放这一块内存,从而导致错误。解决方案应该如下

有的时候我们不希望有些对象被拷贝,比如有一个类是人(Person),我们声明一个p,但是我们知道世界上不可能有两个一摸一样的人,所以不允许对p进行拷贝构造,这个时候我们需要手动的将拷贝构造函数在private下声明,这样就不允许外部显式的调用拷贝构造函数,从而不能进行拷贝。

但谨记,不要将构造函数和析构函数放入private下,这样会导致类无法创建或者创建后出错。

Effective C++ 第五条 Know what functions C++ silently writes and ca的评论 (共 条)

分享到微博请遵守国家法律