String类的构造函数和析构函数

近期遇到一些困惑。行动的过程中瞻前顾后,不能酣畅淋漓。困惑是因为模糊,业余时间把这些东西搞清楚。

1、类何时需要自己的析构函数?

 当类的构造函数在执行过程中申请了一些资源,销毁类的对象时需要收回这些资源。

 一个相当经典的例子:

#include <iostream>
using namespace std;
class String
{
public:
String(const char*str);
~String();
explicit String(const String&str);
String&operator=(const String&str);
private:
char *m_data;
size_t m_size;
};

String::String(const char*str)
{
if(NULL == str)
{
m_size = 1;
m_data = new char [1];
*m_data = '\0';
m_size = 0;
}
else
{
int length = strlen(str);
m_data = new char[length+1];
strcpy(m_data,str);
m_size = length;
}
}

//
String::String(const String &str)
{
int len = strlen(str.m_data);
m_data = new char [len+ 1];
strcpy(m_data,str.m_data);
m_size = len;
}

//
String&String::operator =(const String&str)
{
//避免自赋值
if(this != &str )
{
int len = strlen(str.m_data)+1;
char *tmp = new char[len];
strcpy(tmp,str.m_data);
delete []m_data;
m_data = tmp;
m_size = len;

}
return *this;
}

//
String::~String()
{
delete []m_data;
m_size = 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}

 explicit关键字的使用,防止隐式的类型转换。explicit关键字只能用于类内的构造函数,外面不再需要。单形参构造函数应该为explicit。

posted on 2012-05-30 22:11  kunkka_  阅读(332)  评论(0编辑  收藏  举报