条款05:了解C++默默编写了并调用那些函数

1.默认生成的函数

当你定义一个空类C++会自动为你生成默认构造函数,拷贝构造函数,赋值运算符重载,析构函数。

这些函数都是public且inline

class Empty {......};

//经过C++处理后

class Empty

{

        Empty(){.......};//默认构造

        Empyt(const Empty &rhs){.........};//拷贝构造

        Empty& operator=(const Empty & rhs){......};//赋值运算符重载

        ~Empty(){........};//析构函数

};

这些函数只有在被调用的时候才会实例化出来。

当成员变量有&和const时编译器拒绝为其生成赋值运算符重载

2.拷贝构造和赋值运算符重载引发析构多次的问题

如果你的成员变量指向了一个类外的空间,这个时候就不能使用默认的拷贝构造和赋值。

因为默认生成的拷贝构造和赋值,只会原本的对象的每一个成员变量拷贝到目标对象,如果是指针,会出现两个指针指向一个对象,当原本对象析构,其指向的空间被释放,但是目标对象还会对该空间再次析构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值