最近学习突然发现结构体也可以像字符串一样实现拷贝构造那些,然后比较了一下,下面是结构体和字符串的构造、拷贝、赋值和析构函数代码解释:
struct Node
{
char *name;
int age;
// 构造函数
Node(char *n = 0, int a = 0){
name = strdup(n.name);
age = a; }
// 拷贝构造
Node(const Node& n){
name = strdup(n.name);
age = n.age;
}
// 赋值函数
Node& operator=(const Node& n){
if(this != &n)
{
if(name != 0)
free(name);
name = strdup(n.name);
age = n.age;
}
return *this;
}
// 析构函数
~Node(){
if(name != 0)
free(name);
}
};
字符串原型
class String
{
public:
String(const char *str = NULL); // 普通构造函数
String(const String &other); // 拷贝构造函数
~ String(void); // 析构函数
String & operate =(const String &other); // 赋值函数
private:
char *m_data; // 用于保存字符串
};
//构造函数
Sting::String(const char *str = NULL){
if(NULL == str)
{
m_data = new char[1];
m_data = '\0';
}else
{
int length = strlen(str);
m_data = new char[length+1];
strcpy(m_data,str);}
}
}
//拷贝构造函数
String::String(const String &other)
{
int length =strlen(other.m_data);
m_data =new char[length+1];
strcpy(m_data,other.m_data);
}
//赋值函数
String & operate =(const String &other)
{
if(this == other)
return *this;
else
{
detele[]m_data;
int length = strlen(other.m_data);
m_data = new char[length+1];
strcpy(m_data,other.m_data);
return *this;
}
}
//析构函数
~ String(void)
{
detele[]m_data;
}