Название: 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( const QDomElement& a); тебя спасет.почему оператор = возвращает ссылку, а не копию? и копирующий конструктор тоже возврящает ссылку а не копию? Как сделать копию, я знаю. Вопрос скорее философский. например функция делаю фуекцию bool f(QDomElement a); С виду функция принимает a, создает копию для f, потом с этой копией работает. Можно её модифицировать, не опасаясь что оригинал изменица. А на самом деле объявление "bool f(QDomElement a);" эквивалентно "bool f(QDomElement& a);", т.к. копирующий конструктор у QDomElement не создает копию. Зачем троли так сделали? Если бы тролли сделали возврат копии при =, то выражение QDomElement elem = doc.firstChild() приведет к cозданию у doc еще одного "ребенка", копии firstChild(). Название: Re: QDomElement почему = возвращает ссылку? Отправлено: Swappp от Январь 29, 2009, 15:45 Зачем троли так сделали? Троли тут не причем. Так DOM везде работает. |