#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. Я подозреваю, что вы наблюдаете неопределенное поведение… вероятно, вы получили указатели на ранее выделенную память, которая все еще содержит некоторые данные, которые кажутся допустимыми. Но эта память, вероятно, помечена как освобожденная, поэтому в ближайшее время может быть перезаписана любыми другими данными.