首页 > 代码库 > 坚持c++,真正掌握c++

坚持c++,真正掌握c++

我写这样的文章,当然是为了自己日后方便自己查看,当作看书的笔记,也是为了和广大喜欢c++语言的同仁交流。几天复习了c++primer的13章复制控制。从上一章中我们知道,如果我们不定义类的构造函数时,编译器就会很友好的帮我们合成一个,那么复制构造函数呢?首先复制构造函数的定义如class(const class&),复制构造函数和构造函数一样也没有返回值,但是复制构造函数具有一个该类类型的引用作为单一形参,当我们定义一个新对象并用一个同类型的类对象对它进行初始化时,将显式调用复制构造函数;当我们在一个函数中返回一个该类型的对象时,将隐式调用复制构造函数。如果我们没有定义复制构造函数,那么编译器会为我们创建一个合成的复制构造函数吗?答案是会的。一般不定义类的复制构造函数和默认构造函数会局限类的使用。复制构造函数还有一种简单的实现方式:利用赋值操作符来实现。要定义赋值操作符,要简单的了解下重载操作符。定义如下class operator=(const class &),其实复制构造函数和赋值是常在一起的,要定义复制构造函数的地方也一定需要赋值操作符。类当中还存在着一个特殊的函数:析构函数。析构函数和复制构造函数或者复制操作符之间的重要的区别是:即使我们定义了自己的析构函数,但是编译器仍然会给我们合成一个析构函数,而且在运行时先执行用户自己定义的析构函数,然后再运行合成的析构函数。析构函数的难点在于什么时候需要定义析构函数,经验告诉我们当我们的设计的类中存在着指针或者在堆上分配了内存的时候需要定义析构函数。