Class 对象在 post 增量后删除

Class object deleting after post increment

我有天气 class。因此,假设我创建了一个 class 的对象,假设 Weather object; 之后我创建了 pre 和 post 增量来操纵该天气的温度。因此,当我执行 ++object; 时,温度完美地增加了一个,但是当我执行 object++; 时,析构函数被调用,我的指针被删除,然后我的温度变成随机数。我的问题是,为什么在世界上预增量工作,但在 post 增量之后在该对象上调用析构函数?这是我的工作前增量:

Weather &Weather::operator++() {
    ++ptr->airTemperature;
    return *this;
}

这是无效的 post 增量:

Weather Weather::operator++(int) {
    Weather temp = *this;
    ++ptr->airTemperature;
    return temp;
}

据我了解,预增量 returns 本身和 post 增量 returns 一个副本,所以我这样做了,但可能导致问题的原因是什么?

尝试这样的事情,你可以避免所有的复制构造函数和析构函数。

class Temp {
   double airTemperature;
};

class Weather {

    public:

    Weather(std::shared_ptr<Temp> tempPtr)
    : ptr(tempPtr){}

    std::shared_ptr<Temp> ptr;

    Weather Weather::operator++(int) {
        Weather temp = *this;
        ++ptr->airTemperature;
        return temp;
    }

    Weather &Weather::operator++() {
        ++ptr->airTemperature;
        return *this;
    }
};

当然要考虑你是否真的需要一个指向Temp的指针。也许你应该这样做。

class Weather {

    public:

    Weather(Temp temp)
    : temp(temp){}

    Temp ptr;

    Weather Weather::operator++(int) {
        Weather temp = *this;
        ++temp.airTemperature;
        return temp;
    }

    Weather &Weather::operator++() {
        ++temp.airTemperature;
        return *this;
    }
};