获取指针属性值

时间:2014-03-24 00:07:24

标签: c++ pointers

我正在进行有关运算符重载和引用的练习。问题是,当我在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");
}

1 个答案:

答案 0 :(得分:3)

我认为你没有理由将radius作为int的指针。它过于复杂,你看到你遇到了各种各样的问题。

除了你提到的问题,你还有另一个问题:

++itsRadius;

您正在递增指针,但您应该增加它指向的对象。

++(*itsRadius);

只需使用int值即可摆脱所有头痛。