Название: Копия QList по ссылке Отправлено: xintrea от Август 13, 2015, 00:52 Я слаб в C++, поэтому не могу понять следующего.
Мне нужно сделать конструктор копирования, в котором нужно сделать глубокую копию QList Код: // Обычный конструктор Я могу конечно скопировать QList поэлементно, но хотелось бы понять как копировать одной командой. Название: Re: Копия QList по ссылке Отправлено: Johnik от Август 13, 2015, 01:14 если правильно понял из обрывка кода, то конструктор копирования будет выглядеть так:
Код
Название: Re: Копия QList по ссылке Отправлено: Fregloin от Август 13, 2015, 08:18 почитайте про implicit и explicit sharing и этот вопрос у вас отпадет сам собой.
если в кратце - при копировании списка на самом деле копируется указатель на некие данные. и пока вы не будете ничего в нем менять (а только читать например), то ваши списки (оригинал и копия) будут ссылаться по факту на одни и теже данные. Как только вы добавите/измените что то в одном из списков, произойдет copy-on-write - т.е. эти два списка будут ссылаться уже на разные данные. Т.е. я не вижу острой необходимости явного копирования. Все это за вас сделает в фоне Qt. Название: Re: Копия QList по ссылке Отправлено: Igors от Август 13, 2015, 08:55 Код Впечатление что просто член QList (вместо указателя) было бы проще и лучше Название: Re: Копия QList по ссылке Отправлено: xintrea от Август 13, 2015, 12:20 почитайте про implicit и explicit sharing и этот вопрос у вас отпадет сам собой. если в кратце - при копировании списка на самом деле копируется указатель на некие данные. и пока вы не будете ничего в нем менять (а только читать например), то ваши списки (оригинал и копия) будут ссылаться по факту на одни и теже данные. Как только вы добавите/измените что то в одном из списков, произойдет copy-on-write - т.е. эти два списка будут ссылаться уже на разные данные. Т.е. я не вижу острой необходимости явного копирования. Все это за вас сделает в фоне Qt. Вопрос в том, как синтаксически правильно прописать копирование списка, чтобы это было именно копирование. То есть, если я пропишу: Код: AttachTableData::AttachTableData(AttachTableData &obj) То это же не будет являться копированием объекта, тут просто присвоится значение указателя, и не до никаких implicit и explicit sharing дело не дойдет. Название: Re: Копия QList по ссылке Отправлено: gil9red от Август 13, 2015, 12:25 почитайте про implicit и explicit sharing и этот вопрос у вас отпадет сам собой. если в кратце - при копировании списка на самом деле копируется указатель на некие данные. и пока вы не будете ничего в нем менять (а только читать например), то ваши списки (оригинал и копия) будут ссылаться по факту на одни и теже данные. Как только вы добавите/измените что то в одном из списков, произойдет copy-on-write - т.е. эти два списка будут ссылаться уже на разные данные. Т.е. я не вижу острой необходимости явного копирования. Все это за вас сделает в фоне Qt. Вопрос в том, как синтаксически правильно прописать копирование списка, чтобы это было именно копирование. То есть, если я пропишу: Код: AttachTableData::AttachTableData(AttachTableData &obj) То это же не будет являться копированием объекта, тут просто присвоится значение указателя, и не до никаких implicit и explicit sharing дело не дойдет. Передавайте в конструктор (http://doc.qt.io/qt-4.8/qlist.html#QList-2) :) |