c ++运算符重载,调用析构函数

时间:2013-02-18 10:21:45

标签: c++ parameters operator-overloading destructor

我正在尝试跟踪创建给定类的对象数量。如果我在类中重载operator ++,则会调用析构函数,但我不知道为什么。更具体一点:

class num{
public:
    virtual void setValue(int)=0;
    static int db;
    num(){}
    ~num(){}
};

int num::db = 0;

class int32: public num{
public:
    // GET
    int getValue();

    // SET
    void setValue(int f);

    // constructor
    int32()
    {
        cout << "Construction..."<<endl;
        this->value = 0;num::db++;
    }

    // destructor
    ~int32()
    {
        cout << "destruction..."<<endl;
        num::db--;
    }

    // operators
    int32 operator++(int);
    int32 operator++(void);

protected:
    int value;
};

int32 int32::operator ++()
{
    this->value++;
    return *this;
}

int32 int32::operator ++(int)
{
    this->value++;
    return *this;
}

int main()
{
    int32 i;
    i.setValue(20);

    cout << (i++).getValue()<<endl;
    cout << (++i).getValue()<<endl;

    cout << num::db;

    cout << endl << "End of execution.";
    return 1;
}

结果是: 施工... 21 毁灭... 22 毁灭... -1 执行结束。破坏...

所以在++ i和i ++之后调用析构函数,但为什么呢?

非常感谢!

3 个答案:

答案 0 :(得分:2)

这是因为您返回副本。您可能想要创建复制构造函数

答案 1 :(得分:1)

您将在++运算符中返回该对象的副本。

每次调用return *this时,实际上都会创建一个传递给调用代码的对象副本。

答案 2 :(得分:0)

这是因为你的“operator ++()”方法都返回“int32”的副本。因此,对于每个调用,都会创建并返回一个新实例。