operator=问题
/***********确定这个类是否需要赋值操作符?**************//*********完全不明白operator=的作用,求解释!************/#include <iostream>using namespace std;struct NoName{ NoName(): pstring(new pstring), i(0), d(0) {}private: string *pstring; int i; double d;public: NoName(const NoName &rgs) { *pstring = *(rgs.pstring); i = rgs.i; d = rgs.d; }};
struct NoName{ NoName(): pstring(new pstring), i(0), d(0) {}private: string *pstring; int i; double d;public: NoName& operator=(const NoName& rgs); NoName(const NoName &rgs) { pstring = new pstring; *pstring = *(rgs.pstring); i = rgs.i; d = rgs.d; } ~NoName();};NoName& NoName::operator =(const NoName &rgs){ if(&rgs == this)//防止自赋值 { return this; } *pstring = *(rgs.pstring); //给三个成员赋值 i = rgs.i; d = rgs.d; return this;}NoName::~NoName(){ delete pstring; //构造函数和复制构造函数里有new的话,析构里也要有delete}
[解决办法]
行不行试试就知道了,呵呵
#include<iostream>#include<string>using namespace std;struct NoName{ string *pstring; int i; double d;public: NoName(): pstring(new string), i(0), d(0) {} NoName(const NoName &rgs) { *pstring = *(rgs.pstring); i = rgs.i; d = rgs.d; } ~NoName(){delete pstring;}};int main(){ NoName *a=new NoName(); NoName *b=new NoName(); *a=*b; b->pstring->append("sdftysd"); cout<<*(b->pstring)<<endl; cout<<*(a->pstring)<<endl; delete b; cout<<*(a->pstring)<<endl; delete a;}