我有一个析构函数,它检查是否已分配指针,如果已分配,则将其删除:
ShadeRec::~ShadeRec(){
cout << "before deleting ShadeRec" << endl;
if(material){
cout << material << endl;
delete material;
material = NULL;
}
cout << "after deleting ShadeRec" << endl;
}
第一个指针很好,然后在第二个指针上程序给了我错误。
我已经检查了cout
s 并且指针内部有一些东西,这是有道理的,因为它进入了 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;