Назначение переменной QStringList
работает так же, как назначение любой другой переменной в C ++. Для объектов оператор присваивания объекта слева вызывается для копирования содержимого объекта справа в объект слева. Обычно это делается только для членов:
struct A {
int x;
QString y;
A& operator=(const A &other) {
// do the assignment:
x = other.x;
y = other.y;
return *this;
}
};
Объект слева от назначения «приспосабливается» к тому же предмету, что и объект справа. Новый объект не выделен, только существующий изменен.
Если класс более сложный и, например, содержит указатели на динамически распределяемые данные (как это, вероятно, имеет место для QStringList
), оператор присваивания может быть более сложным для реализации. Но это деталь реализации класса QStringList
, и вам не нужно об этом беспокоиться. Объект QStringList
слева от назначения будет изменен, чтобы быть равным объекту справа.
В вопросе 2 вы назначаете объект переменной-члену, что приводит к изменению объекта в переменной-члене так, чтобы он содержал те же вещи, что и объект, который ему назначен. То, что этот другой объект позже будет удален, не имеет значения для переменной-члена.
Семантически это то же самое, что и при назначении простых целых чисел:
int i, j;
i = j;
Память, в которой хранится i
, изменяется, поэтому в ней содержится то же значение, что и j
. То, что произойдет с j
позже, не имеет значения для i
.