结构体的构造、拷贝、赋值、析构和字符串的拷贝、构造、赋值和析构函数的比较

最近学习突然发现结构体也可以像字符串一样实现拷贝构造那些,然后比较了一下,下面是结构体和字符串的构造、拷贝、赋值和析构函数代码解释:

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;
}

猜你喜欢

转载自blog.csdn.net/bloke_come/article/details/74466061
今日推荐