effective C++笔记之条款11: 为需要动态分配内存的类声明一个拷贝构造函数和一个赋值操作符

来源:互联网 发布:c 冒泡排序算法 编辑:程序博客网 时间:2024/06/06 07:37


l        当类里有指针,并且需要动态分配时,如果没有定义自己的拷贝构造函数和赋值操作符,使用编译器合成的缺省的操作,将会带来一些严重的后果,如内存泄漏(调用赋值操作符时)、调用两次delete(如以类对象进行传值调用、调用拷贝构造函数时)。

l        用delete去删除一个已经被删除的指针,其结果是不可预测的。

l        只要类里有指针,就要写自己版本的拷贝构造函数和赋值操作符。在这些函数里,你可以拷贝那些被指向的数据结构,从而使每个对象都有自己的拷贝;或者可以采用某种引用计数机制去跟踪当前有多少个对象指向某个数据结构。引用技术的方法更复杂,而且它要求构造函数和析构函数内部做更多的工作,但在某些(虽然不是所有)程序里,它会节省内存并切实提高速度。

l        对于某些类,当实现拷贝构造函数和赋值操作符非常麻烦时,特别是可以确信程序中不会做拷贝和赋值操作的时候,去实现他们就会相对来说有点得不偿失。可以只声明这些函数(声明为private成员)而不去定义(实现)它们。这就防止了会有人去调用它们,也防止了编译器去生成它们。(条款27)。

原创粉丝点击