当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

高质量C++/C编程指南-第9章-类的构造函数、析构函数与赋值函数(4[VC/C++编程]

赞助商链接



  本文“高质量C++/C编程指南-第9章-类的构造函数、析构函数与赋值函数(4[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

类String的赋值函数比构造函数复杂得多,分四步实现:

(1)第一步,查抄自赋值.你大概会认为画蛇添足,莫非有人会笨拙到写出 a = a 这样的自赋值语句!的确不会.但是间接的自赋值仍有大概呈现,比方

// 内容自赋值

b = a;

c = b;

a = c;
// 地址自赋值

b = &a;

a = *b;


大概有人会说:“即便呈现自赋值,我也可以不睬睬,大不了化点时间让对象复制自己罢了,反正不会出错!”

他真的说错了.看看第二步的delete,自杀后还能复制自己吗?所以,假如发现自赋值,应当即刻终止函数.注意不要将查抄自赋值的if语句

if(this == &other)

错写成为

if( *this == other)

(2)第二步,用delete释放原有的内存资源.假如目前不释放,今后就没机会了,将造成内存泄露.

(3)第三步,分配新的内存资源,并复制字符串.注意函数strlen返回的是有效字符串长度,不包含完毕符‘\0’.函数strcpy则连‘\0’一同复制.

(4)第四步,返回本对象的引用,目的是为了实现象 a = b = c 这样的链式表达.注意不要将 return *this 错写成 return this .那么可否写成return other 呢?效果不是一样吗?

不可以!因为我们不知道参数other的生命期.有大概other是个暂时对象,在赋值完毕后它即刻消逝,那么return other返回的将是垃圾.

9.7 偷懒的办法处理拷贝构造函数与赋值函数
假如我们实在不想编写拷贝构造函数和赋值函数,又不答应别人利用编译器生成的缺省函数,怎么办?

偷懒的办法是:只需将拷贝构造函数和赋值函数声明为私有函数,不用编写代码.

比方:

class A

{ …

private:

A(const A &a); // 私有的拷贝构造函数

A & operate =(const A &a); // 私有的赋值函数

};

假若有人试图编写以下程序:

A b(a); // 调用了私有的拷贝构造函数

b = a; // 调用了私有的赋值函数

编译器将指出错误,因为外界不可以操作A的私有函数.

9.8 如安在派生类中实现类的基本函数
基类的构造函数、析构函数、赋值函数都不能被派生类担当.假如类之间存在担当关系,在编写上述基本函数时应注意以下事项:

u 派生类的构造函数应在其初始化表里调用基类的构造函数.

u 基类与派生类的析构函数应当为虚(即加virtual)


  以上是“高质量C++/C编程指南-第9章-类的构造函数、析构函数与赋值函数(4[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>高质量C++/C编程指南-第7章-内存管理(6)</b>
  • 高质量C++/C编程指南-第7章-内存管理(7)
  • 高质量C++/C编程指南-第8章-C++函数的高级特点(1)
  • 高质量C++/C编程指南-第8章-C++函数的高级特点(2)
  • 高质量C++/C编程指南-第8章-C++函数的高级特点(3)
  • <b>高质量C++/C编程指南-第8章-C++函数的高级特点(4)</b>
  • <b>高质量C++/C编程指南-第9章-类的构造函数、析构函数与赋值函数(1</b>
  • 高质量C++/C编程指南-第9章-类的构造函数、析构函数与赋值函数(2
  • 高质量C++/C编程指南-第9章-类的构造函数、析构函数与赋值函数(3
  • 高质量C++/C编程指南-第9章-类的构造函数、析构函数与赋值函数(4
  • <b>高质量C++/C编程指南-第10章-类的担当与组合(1)</b>
  • 高质量C++/C编程指南-第10章-类的担当与组合(2)
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .