ポインターが割り当てられているかどうかをチェックするデストラクタがあり、割り当てられている場合は削除します。
ShadeRec::~ShadeRec(){
cout << "before deleting ShadeRec" << endl;
if(material){
cout << material << endl;
delete material;
material = NULL;
}
cout << "after deleting ShadeRec" << endl;
}
最初のポインターは問題なく通過し、2番目のポインターでプログラムがエラーを表示します。
s で確認したcout
ところ、ポインター内に何かがあります。これは、if ステートメントに入ったときに意味があります...では、なぜエラーが発生するのですか?
コンストラクター:
ShadeRec::ShadeRec(World& world)
: hit(false),
material(NULL),
hitPoint(),
localHitPoint(),
normal(),
ray(),
depth(0),
colour(0),
t(0.0),
w(world)
{}
ShadeRec::ShadeRec(const ShadeRec& sr)
: hit(sr.hit),
material(sr.material),
hitPoint(sr.hitPoint),
localHitPoint(sr.localHitPoint),
normal(sr.normal),
ray(sr.ray),
depth(sr.depth),
colour(sr.colour),
t(sr.t),
w(sr.w)
{}
材料演算子=
Material&
Material::operator= (const Material& rhs) {
if (this == &rhs)
return (*this);
return (*this);
}
Matte は Material の子です:
Matte* matte1 = new Matte;
これらの両方として:
Matte& operator= (const Matte& rhs);
virtual Material* clone(void) const;