Russian Qt Forum

Qt => XML => Тема начата: juvf от Сентябрь 12, 2008, 13:40



Название: QDomElement почему = возвращает ссылку?
Отправлено: juvf от Сентябрь 12, 2008, 13:40
QDomElement
почему оператор = возвращает ссылку, а не копию?
и копирующий конструктор тоже возврящает ссылку а не копию?

Как сделать копию, я знаю. Вопрос скорее философский. например функция делаю фуекцию

bool f(QDomElement a); С виду функция принимает a, создает копию для f, потом с этой копией работает. Можно её модифицировать, не опасаясь что оригинал изменица. А на самом деле объявление "bool f(QDomElement a);" эквивалентно "bool f(QDomElement& a);", т.к. копирующий конструктор у QDomElement не создает копию.

Зачем троли так сделали?


Название: Re: QDomElement почему = возвращает ссылку?
Отправлено: vaprele07 от Сентябрь 12, 2008, 14:45
Вот мну работал с одной прогой где было около 100 не связанных хмл документов, которые соединялись в общую модель. При тестировании столкнулся с проблемой, когда удалялся QDomDocument и с ним-же обнулялись все элементы этого документа, что вызывало печальные последствия... пришлось хранить-следить-удалять.


Название: Re: QDomElement почему = возвращает ссылку?
Отправлено: lit-uriy от Сентябрь 12, 2008, 17:48
juvf, а если так:
bool f(const QDomElement& a);


Название: Re: QDomElement почему = возвращает ссылку?
Отправлено: novak от Сентябрь 14, 2008, 18:39
Подход, имхо, вполне оправданный. Получается что-то похожее на работу с БД.
У вас есть XML документ, а классы, которые с ним работают, только обеспечивают к нему доступ.
Да и в документации чуть ли не к каждому методу из описания классов для работы с xml упоминается о том, что используется только поверхностное копирование.


Название: Re: QDomElement почему = возвращает ссылку?
Отправлено: juvf от Сентябрь 15, 2008, 07:20
Цитировать
juvf, а если так:
bool f(const QDomElement& a);

ну это не совсем эквивалент. Потому что по прежнему нет копии которую можно безопасно модифицировать. Начитавшись документации можно создать клон методом cloneNode() внутри f и с ним работать. Но не совсем понятно зачем такой изврат?

Цитировать
Подход, имхо, вполне оправданный. Получается что-то похожее на работу с БД.

Ну если бы мне необходимо было передать в фунцию не копию а ссылку, я бы так и написал bool f(QDomElement& a). Ну если мне нужна именно копия, то bool f(QDomElement a). Это классический С++. Троли что-то новое изобрели прировняв "bool f(QDomElement a)" к "bool f(QDomElement& a)". Зачем??? Чтоб лишний раз не писать "&" и вводить в заблуждение? Они даже об этом не обмолвились ни словом в своем учебнике по Qt.
Ни когда не работал с БД. Может я еще не дорос до того, чтоб понять зачем таким "ходом канём" меняют концепцию С++.

ps "Копирующий конструктор" - в самом названии заложено то что он делает конструирует новый и помещяет туда копию. А у тролей ни то, ни другое.

 


Название: Re: QDomElement почему = возвращает ссылку?
Отправлено: vaprele07 от Сентябрь 15, 2008, 10:50
а если данные это указатель на данные?


Название: Re: QDomElement почему = возвращает ссылку?
Отправлено: Lion от Декабрь 09, 2008, 23:21
Для копирования используется функция cloneNode().


Название: Re: QDomElement почему = возвращает ссылку?
Отправлено: GreenGo от Январь 29, 2009, 09:43
QDomElement
почему оператор = возвращает ссылку, а не копию?
и копирующий конструктор тоже возврящает ссылку а не копию?

Как сделать копию, я знаю. Вопрос скорее философский. например функция делаю фуекцию

bool f(QDomElement a); С виду функция принимает a, создает копию для f, потом с этой копией работает. Можно её модифицировать, не опасаясь что оригинал изменица. А на самом деле объявление "bool f(QDomElement a);" эквивалентно "bool f(QDomElement& a);", т.к. копирующий конструктор у QDomElement не создает копию.

Зачем троли так сделали?
bool f( const QDomElement& a); тебя спасет.
Если бы тролли сделали возврат копии при =, то  выражение QDomElement elem = doc.firstChild() приведет к cозданию у doc еще одного "ребенка", копии firstChild().


Название: Re: QDomElement почему = возвращает ссылку?
Отправлено: Swappp от Январь 29, 2009, 15:45
Зачем троли так сделали?
Троли тут не причем. Так DOM везде работает.