在c ++中,当我使用operator =时,会自动调用析构函数?

时间:2016-04-10 08:33:02

标签: c++ operator-overloading destructor assignment-operator

我为练习做了class str,我使用了operator = 将对象分配给另一个对象。 我是这样做的。

#include <string.h>

class Str{
private:
    char *str;
    int len;
    int num;  
public:
    Str(int leng);
    Str(char *neyong);
    ~Str();

    int length(void);
    char *contents(void);
    int compare(Str a);
    int compare(char *a);
    void operator=(char *a);
    void operator=(Str a);
};

Str::Str(char *neyong){
    len = strlen(neyong);
    str = new char[len + 1];
    strcpy(str, neyong);
}
Str::~Str(){
    delete[] str;
}
int Str::length(void){
    return len;
}
char* Str::contents(void){
    return str;
}
void Str::operator=(Str a){
    len = a.length();
    str = new char[len+1];
    strcpy(str, a.contents());
}

(为了便于阅读,我跳过一些功能)

我执行此操作就像下面的代码一样。

Str a("hahahaha"), b("hihihihihihi");

cout << a.contents() << endl;
cout << b.contents() << endl;

a = b;

cout << b.contents() << endl;
cout << a.contents() << endl;   

问题:当我指定a = b时,b的析构函数是 自动调用。可能b.~Str()会删除其所有内容,因此b.contents()不会返回正确的值。

我该如何解决这个问题????

0 个答案:

没有答案
相关问题