一个程序理解C++的构造函数、析构函数和赋值函数

#include <iostream>
#include <string>
using namespace std;
class String
{
   public :
      String(const char *str=NULL);//普通构造函数
      String(const String  &str);//复制构造函数
      ~String(void);//析构函数
      String & operator =(const String &str);//赋值函数
   private:
     char *Mystr;
};
String::String(const char *str)
{
cout<<"constructing"<<endl;
if(Mystr==NULL)
{
Mystr=new char[1];
Mystr='\0';
}
else
{
Mystr=new char[1+strlen(str)];
strcpy(Mystr,str);
}
}
String::String(const String &str)
{
cout<<"constructing copy"<<endl;
Mystr=new char[1+strlen(str.Mystr)];
strcpy(Mystr,str.Mystr);

}

/*

通过这个赋值函数和复制构造函数的对比,我们可以看到其中的区别:

(1) 复制构造是一个对象来初始化一块内存区域,这块内存就是新对象的内存区

(2) 实现不一样,复制构造函数首先是一个构造函数,它调用的时候是通过参数

来的对象来初始化一个对象;而赋值函数是把一个对象赋值给另一个原有的对象(注意原有两个字)

先判断是不是同一对象,若是同一对象,直接返回原对象即可。否则先把原来对象的内存释放掉,然后

重新分配内存,赋值。

*/

String & String::operator =(const String &str)
{
cout<<"operator function"<<endl;
if(this == &str)
{
return *this;
}
else
{
delete []Mystr;
Mystr=new char[1+strlen(str.Mystr)];
        strcpy(Mystr,str.Mystr);
}
return *this;
}
String::~String()
{
cout<<"deconstructing"<<endl;
}
int main()
{
String a("hello");
String b("world");
String c(a);
c=b;
String d=b;//这里是复制构造函数,不是赋值函数!!!
return 0;

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值