本文主要是介绍条款05:了解C++默默编写了并调用那些函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.默认生成的函数
当你定义一个空类C++会自动为你生成默认构造函数,拷贝构造函数,赋值运算符重载,析构函数。
这些函数都是public且inline
class Empty {......};
//经过C++处理后
class Empty
{
Empty(){.......};//默认构造
Empyt(const Empty &rhs){.........};//拷贝构造
Empty& operator=(const Empty & rhs){......};//赋值运算符重载
~Empty(){........};//析构函数
};
这些函数只有在被调用的时候才会实例化出来。
当成员变量有&和const时编译器拒绝为其生成赋值运算符重载
2.拷贝构造和赋值运算符重载引发析构多次的问题
如果你的成员变量指向了一个类外的空间,这个时候就不能使用默认的拷贝构造和赋值。
因为默认生成的拷贝构造和赋值,只会原本的对象的每一个成员变量拷贝到目标对象,如果是指针,会出现两个指针指向一个对象,当原本对象析构,其指向的空间被释放,但是目标对象还会对该空间再次析构。
这篇关于条款05:了解C++默默编写了并调用那些函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!