:コピーコンストラクタ:ストレージが解放されたら?コードが与えられ
class Sample
{
public:
int *ptr;
Sample(int i)
{
ptr = new int(i);
}
~Sample()
{
delete ptr;
}
void PrintVal()
{
cout << "The value is " << *ptr;
}
};
void SomeFunc(Sample x)
{
cout << "Say i am in someFunc " << endl;
}
int main()
{
Sample s1= 10;
SomeFunc(s1);
s1.PrintVal();
}
出力は次のようになります。私は、出力の2行目が来る理由を理解することはできませんよ
Say i am in someFunc
Null pointer assignment(Run-time error)
。出力の2行目。私は、コンパイラが明示的に指定されていない場合、コピーコンストラクタを提供すると思います。したがって、SomeFunc(Sample x)関数では、Sample型のXであるSomeFunc()へのローカルオブジェクトを作成して破棄し、main()のSample型オブジェクト(s1)をそのまま残す必要があります。メイン出口。上記の現象が起こっている理由を答えてください。
このようなピンポイントの回答をいただきありがとうございます。 :) – Abhay
変換コンストラクタの場合を言及した編集のための+1ですが、それはRVOの原因ではありません。 – Sanish
@Als:今日私は自分のStack Exchangeアカウントを作成しました。応答の迅速さ。 :) – Abhay