谈到析构函数时,几乎所有的我身边的参考书无一例外地只用了一点点篇幅,但Big C++名副其实地难得啰里巴嗦地命中了要害一次

质量提示18.4:如果有析构函数,那么也应有拷贝构造函数及赋值运算符(三个基本函数)

对于管理堆内存的类,必须实现这三个函数

举例:

 

//String 类非标准string类,为个人创造的类,其中没有定义拷贝构造函数
String a = "GG";    //分配堆
局部作用域{
    String b 
=a;    //错误,按成员复制会产生共享堆
}
//局部作用域结束,调用析构函数b.~String(),堆空间被删除

//此时a的堆空间已被b的析构函数删除

 

一般常见的构造模式:

 

//拷贝构造函数
X::X (const X& right){
    copy(right);
}


//赋值运算符重载
X& X::operator=(const X& right){
    
if (this !=&right){
        free();
        copy(right);
    }

    
return *this;
}


//析构函数
X::~X(){
    free()
}

 

posted on 2009-07-13 22:42  Latifrons  阅读(541)  评论(0编辑  收藏  举报