Возможна ситуация, когда функция-член TableData::setItem
вызывается объектом типа QtParameter
, поскольку функция берет его не по ссылке, внутри функции должен быть создан объект типа QtParameter
путем конструирования копииот предыдущего!
Если вы хотите избежать этого, возьмите его по ссылке (желательно константный):
bool TableData::setItem(int row, int col, const QtParameter& item)
Двигаясь вперед, внутри функции по адресу:
RowOfData rowData = tableData[row];
С небольшой вероятностью, если это не какой-то тип / ы итератора / указателя на самом низком уровне, это также может быть источником.
Наконец, в:
tableData[row][col] = item;
На основании того, что вы упомянули, другой возможностью может быть способ определения самого оператора присваивания для класса tableData[row][col]
.Помня, что оператор присваивания также является функцией, если он не объявлен как:
assigned_to & operator=(const assigned_from &)
Например:
assigned_to & operator=(assigned_from)
То же, что и в первом случае, объект assign_from будеткопия, созданная в операторе присваивания.
Многие сведения не передаются, и, если под "Глубоким копированием" вы ссылаетесь на QList<T>::node_copy
, конструктор копирования также может происходить внутри, просто по адресу:
current->v = new T(*reinterpret_cast<T*>(src->v));
Это явный вызов a конструктора копирования.Но поскольку информация о типах не указана, я не могу сказать наверняка, именно здесь вызывается конструктор копирования .
Кроме того, если вы не предоставите некоторую информацию о QList<QtParameter>
, я мало что могу сказать о том, почему «Глубокое копирование» не произошло, когда была уничтожена rowData
.