C++易错知识点总结(二)...

1.有些类需要完全禁止对象之间的复制。比如iostream类就不允许复制, 这时, 类必须显示声明其复制构造函数为private类型的。

       如果复制构造函数是私有的, 将不允许用户代码复制该类类型的对象, 编译器将拒绝任何进行复制的尝试。

       然而, 类的友元函数和成员函数仍然可以进行复制, 如果想要有元和成员函数也不能复制对象, 就可以声明一个private类型的复制构造函数但不对其进行定义。

      声明而不定义成员函数是合法的。但是, 任何使用未定义的函数将导致链接错误。所以,通过只声明而不定义一个private类型的复制构造函数, 可以禁止任何企图复制类类型对象的尝试, 用户代码中的复制尝试将在编译阶段报错, 而成员函数或是友元函数中的复制尝试将会在链接阶段报错。

      另外, 不允许复制的类对象只能作为引用传递给函数或从函数返回类对象的引用, 而且也不能作为容器类的元素.

2. 动态分配的对象只有在指向该对象的指针被删除时才撤销。如果没有删除指向动态对象的指针, 则不会运行该对象的析构函数, 对象就一直存在, 从而导致内存泄露, 而且, 对象内部使用的任何资源都不会被释放。

     当对象的指针或引用超出作用域时, 不会运行对象的析构函数。

3. 默认的析构函数按对象创建时的逆序撤销每个非static成员, 因此, 他按照类中声明次序的逆序撤销成员。另外, 默认的析构函数并不会删除指针成员所指向的对象。

4. 因为不能指定任何形参, 所以不能重载析构函数。析构函数和构造函数一个重要的区别是, 即使编写了自己的析构函数, 默认的析构函数仍然存在。在撤销一个对象时, 先调用自己的析构函数, 然后再去执行默认的析构函数.

 摘自:《c++ primer》

你可能感兴趣的:(C/C++)