QVector<QPointer> сохранить в QSettings

#c #qt #qvector #qpointer

Вопрос:

Я зарегистрирован в main.c

 qRegisterMetaTypeStreamOperators<QVector<QPointer<Sensor>>>("QVector<QPointer<Sensor>>");
 

Я перегружен этим

 inline QDataStream amp;operator<<(QDataStream amp;stream, const QVector<QPointer<Sensor>> amp;sensors) {
    auto i = sensors.constBegin();
    while (i != sensors.constEnd()) {
        stream << i->operator Sensor *()->id() << i->operator Sensor *()->type()
               << i->operator Sensor *()->operation()
               << i->operator Sensor *()->operationValue()
               << i->operator Sensor *()->valueBytesize();
          i;
    }
    return stream;
}

inline QDataStream amp;operator>>(QDataStream amp;stream, QVector<QPointer<Sensor>> amp;sensors) {
  return stream;
}
 

Я получаю ценность от qsetting в этом

 QVariant v = settings.value("1");
m_sensors = v.value<QVector<QPointer<Sensor>>>();
 

И я получаю QVector с новыми указателями все хорошо, но почему это работает? Я не понимаю, как выделить память для QPointer<Sensor> того, в каком месте это произошло?

Комментарии:

1. Я подозреваю, что вы наблюдаете неопределенное поведение… вероятно, вы получили указатели на ранее выделенную память, которая все еще содержит некоторые данные, которые кажутся допустимыми. Но эта память, вероятно, помечена как освобожденная, поэтому в ближайшее время может быть перезаписана любыми другими данными.