Russian Qt Forum
Ноябрь 22, 2024, 16:05 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QDomElement почему = возвращает ссылку?  (Прочитано 8903 раз)
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« : Сентябрь 12, 2008, 13:40 »

QDomElement
почему оператор = возвращает ссылку, а не копию?
и копирующий конструктор тоже возврящает ссылку а не копию?

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

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

Зачем троли так сделали?
Записан
vaprele07
Гость
« Ответ #1 : Сентябрь 12, 2008, 14:45 »

Вот мну работал с одной прогой где было около 100 не связанных хмл документов, которые соединялись в общую модель. При тестировании столкнулся с проблемой, когда удалялся QDomDocument и с ним-же обнулялись все элементы этого документа, что вызывало печальные последствия... пришлось хранить-следить-удалять.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #2 : Сентябрь 12, 2008, 17:48 »

juvf, а если так:
bool f(const QDomElement& a);
Записан

Юра.
novak
Гость
« Ответ #3 : Сентябрь 14, 2008, 18:39 »

Подход, имхо, вполне оправданный. Получается что-то похожее на работу с БД.
У вас есть XML документ, а классы, которые с ним работают, только обеспечивают к нему доступ.
Да и в документации чуть ли не к каждому методу из описания классов для работы с xml упоминается о том, что используется только поверхностное копирование.
Записан
juvf
Программист
*****
Offline Offline

Сообщений: 570


Просмотр профиля
« Ответ #4 : Сентябрь 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 "Копирующий конструктор" - в самом названии заложено то что он делает конструирует новый и помещяет туда копию. А у тролей ни то, ни другое.

 
« Последнее редактирование: Сентябрь 15, 2008, 08:26 от juvf » Записан
vaprele07
Гость
« Ответ #5 : Сентябрь 15, 2008, 10:50 »

а если данные это указатель на данные?
Записан
Lion
Гость
« Ответ #6 : Декабрь 09, 2008, 23:21 »

Для копирования используется функция cloneNode().
Записан
GreenGo
Гость
« Ответ #7 : Январь 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().
Записан
Swappp
Гость
« Ответ #8 : Январь 29, 2009, 15:45 »

Зачем троли так сделали?
Троли тут не причем. Так DOM везде работает.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.053 секунд. Запросов: 22.