以下のプログラムは参考書に書かれてあるプログラムです。
(あ)の、コピーコンストラクタの仕組みがイマイチ分かりません。
メモリの二重解放を防ぐために行われているという事は分かるのですが、ここの p はどのオブジェクトのpになるんでしょうか。
main()内でgetval()の仮引数に指定されているオブジェクトは、o になりますよね?
p が何をしているのかが分かりません。
どなたか宜しくお願いします。
// このプログラムにはエラーがある
####include <iostream>
####include <cstdlib>
using namespace std;
class myclass {
int *p;
public:
myclass(int i);
myclass(const myclass &ob);
~myclass() { delete p; }
friend int getval(myclass o);
};
myclass::myclass(int i)
{
p = new int;
if(!p) {
cout << "メモリ割り当てエラー\n";
exit(1);
}
*p = i;
}
myclass::myclass(const myclass &ob) ・・・(あ)
{
p = new(nothrow) int;
if(!p){ cout <<"メモリ割り当てエラー\n"; exit(1); } *p = *ob.p;
}
int getval(myclass o)
{
return *o.p; // 値を取得する
}
int main()
{
myclass a(1), b(2);
cout << getval(a) << " " << getval(b);
cout << "\n";
cout << getval(a) << " " << getval(b);
cout << "\n";
return 0;
}
回答1件
あなたの回答
tips
プレビュー