= 演算子をオーバーロードして文字列をコピーしようとしています。
class cString
{
int len;
char *mbuff;
};
int main()
{
cString s1,s2;
s1 = s2;
//here s1 goes out of scope and its destructor called
cout<<" hello";
......
......
......
return 0;
}
cString& cString::operator=(const cString &s)
{
if(this->mbuff!=NULL)
delete[] (this->mbuff);
this->len = s.len;
this->mbuff = new char[this->len+1];
strcpy(this->mbuff,s.mbuff);
return *this;
}
s1=s2 はs1.operator=(s2) として扱われます。
operator=関数では、s1 が暗黙的に渡されます。s1 は main のブロックで作成されるため、s1 のデストラクタは最後に呼び出す必要があります。つまり、メインを終了する直前。
しかし、戻り値の型をcString&(reference)と書くと、関数から main に戻った直後にs1 のデストラクタが呼び出されます。ただし、戻り値の型がvoidの場合、s1 のデストラクタはすぐには呼び出されません。main..を終了するときに通常どおり呼び出します。
参照を返すとオブジェクトs1が範囲外になるのはなぜですか? return *this の正確な意味は何ですか?
参照を返す必要がないことはわかっています。void 戻り値の型でコードを正常に実行しました。どうなるのか気になるところです…!
ありがとう...!