我正在进行有关运算符重载和引用的练习。问题是,当我在SimpleCircle类的“itsRadius”指针属性中询问值时,我得到奇怪的值...另外,如果我有这个析构函数:
SimpleCircle::~SimpleCircle()
{
delete itsRadius;
itsRadius = 0;
}
我收到“_block_type_is_valid(phead-> nblockuse)”错误。想法是让这个析构函数删除为类中的属性分配的内存...我知道当我删除两次已被删除的东西时会触发此错误,但我不知道这发生了什么...是所以?
这是练习的漏洞代码:
#include <iostream>
using namespace std;
class SimpleCircle
{
public:
SimpleCircle();
SimpleCircle( int );
SimpleCircle( SimpleCircle& );
~SimpleCircle();
void setRadius ( int );
int getRadius() const { return *itsRadius; };
const SimpleCircle& operator++();
const SimpleCircle operator++( int );
SimpleCircle& operator=( const SimpleCircle& );
private:
int *itsRadius;
};
SimpleCircle::SimpleCircle()
{
itsRadius = new int(5);
}
SimpleCircle::SimpleCircle(int radius)
{
itsRadius = new int(radius);
}
SimpleCircle::SimpleCircle( SimpleCircle & rhs )
{
int val = rhs.getRadius();
itsRadius = new int (val);
}
SimpleCircle::~SimpleCircle()
{
delete itsRadius;
itsRadius = 0;
}
const SimpleCircle& SimpleCircle::operator++()
{
++itsRadius;
return *this;
}
const SimpleCircle SimpleCircle::operator++(int)
{
SimpleCircle temp(*this);
++(itsRadius);
return temp;
}
SimpleCircle& SimpleCircle::operator=( const SimpleCircle& rhs)
{
if (this == &rhs) { return *this; }
*itsRadius = rhs.getRadius();
return *this;
}
void main()
{
SimpleCircle a, b(9);
a++;
++b;
cout << a.getRadius();
cout << b.getRadius();
a = b;
cout << a.getRadius();
cout << b.getRadius();
system("pause");
}
答案 0 :(得分:3)
我认为你没有理由将radius作为int的指针。它过于复杂,你看到你遇到了各种各样的问题。
除了你提到的问题,你还有另一个问题:
++itsRadius;
您正在递增指针,但您应该增加它指向的对象。
++(*itsRadius);
只需使用int
值即可摆脱所有头痛。