LINUX.ORG.RU

История изменений

Исправление Xintrea, (текущая версия) :

Судя по qdom.h в Qt 4.5, уже в нем был такой же механизм.

Убедил.

Но вот вопрос. У меня несколько классов, объекты последующего включены в объект текущего, грубо говоря:

- Корень
- Ветка
- Таблица записей в ветке
- Запись
- Таблица аттачей в записи
- Аттач

И вот у каждого такого класса есть метод exportDataToDom().

Методы эти вызываются по цепочке в глубину, и в конце концов формируется корневой QDomDocument.

Каждый метод принимает в параметре корневой объект QDomDocument, который нужен чтобы создать QDomElement. Если не знать корневого QDomDocument, то отдельно созданный QDomElement невозможно прилепить ни к QDomDocument, ни к QDomElement. Вот такая особенность DOM-модели в Qt.

Поэтому приходится тягать в глубины всех методов корневой QDomDocument. Я сейчас использую примерно такой код в методах exportDataToDom():

QDomElement Record::exportDataToDom(QDomDocument doc) const
{
  QDomElement elem=doc.createElement("record");

  ... 

  QDomElement att=attachTable.exportDataToDom(doc); // Проброс doc далее

  elem.appendChild( att );

  ...
}


Учитывая, что QDomDocument является Implicit Sharing объектом, то такой проброс должен приводить только к передачи указателя.

Но! Можно заметить, что в каждом методе exportDataToDom() есть команда вида:

doc.createElement("...");


Так вот я не пойму, эта команда меняет объект doc или нет? Если меняет, то у меня будут множиться эти QDomDocument как грибы после дождя.


То есть, я хочу узнать, может быть стоит передавать таки указатель на QDomDocument, вот так:

QDomElement Record::exportDataToDom(QDomDocument *doc) const

Исправление Xintrea, :

Судя по qdom.h в Qt 4.5, уже в нем был такой же механизм.

Убедил.

Но вот вопрос. У меня несколько классов, объекты последующего включены в объект текущего, грубо говоря:

- Корень
- Ветка
- Таблица записей в ветке
- Запись
- Таблица аттачей в записи
- Аттач

И вот у каждого такого класса есть метод exportDataToDom().

Методы эти вызываются по цепочке в глубину, и в конце концов формируется корневой QDomDocument.

Каждый метод принимает в параметре корневой объект QDomDocument, который нужен чтобы создать QDomElement. Если не знать корневого QDomDocument, то отдельно созданный QDomElement невозможно прилепить ни к QDomDocument, ни к QDomElement. Вот такая особенность DOM-модели в Qt.

Поэтому приходится тягать в глубины всех методов корневой QDomDocument. Я сейчас использую примерно такой код в методах exportDataToDom():

QDomElement Record::exportDataToDom(QDomDocument doc) const
{
  QDomElement elem=doc.createElement("record");

  ... 

  QDomElement att=attachTable.exportDataToDom(doc); // Проброс doc далее

  elem.appendChild( att );

  ...
}


Учитывая, что QDomDocument является Implicit Sharing объектом, то такой проброс должен приводить только к передачи указателя.

Но! Можно заметить, что в каждом методе exportDataToDom() есть команда вида:

doc.createElement("...");


Так вот я не пойму, эта команда меняет объект doc или нет? Если меняет, то у меня будут множиться эти QDomDocument как грибы после дождя.


То есть, я хочу узнать, может быть стоит передавать таки укзатель на QDomDocument, вот так:

QDomElement Record::exportDataToDom(QDomDocument *doc) const

Исправление Xintrea, :

Судя по qdom.h в Qt 4.5, уже в нем был такой же механизм.

Убедил.

Но вот вопрос. У меня несколько классов, объекты последующего включены в объект текущего, грубо говоря:

- Корень
- Ветка
- Таблица записей в ветке
- Запись
- Таблица аттачей в записи
- Аттач

И вот у каждого такого класса есть метод exportDataToDom().

Методы эти вызываются по цепочке в глубину, и в конце концов формируется корневой QDomDocument.

Каждый метод принимает в параметре корневой объект QDomDocument, который нужен чтобы создать QDomElement. Если не знать корневого QDomDocument, то отдельно созданный QDomElement невозможно прилепить ни к QDomDocument, ни к QDomElement. Вот такая особенность DOM-модели в Qt.

Поэтому приходится тягать в глубины всех методов корневой QDomDocument. Я сейчас использую примерно такой код в методах exportDataToDom():

QDomElement Record::exportDataToDom(QDomDocument doc) const
{
  QDomElement elem=doc.createElement("record");

  ... 

  QDomElement att=attachTable.exportDataToDom(doc); // Проброс doc далее

  elem.appendChild( att );

  ...
}


Учитывая, что QDomDocument является Implicit Sharing объектом, то такой проброс должен приводить только к передачи указателя.

Но! Можно заметить, что в каждом методе exportDataToDom() есть команда вида:

doc.createElement("...");


Так вот я не пойму, эта команда меняет объект doc или нет? Если меняет, то у меня будут множиться эти QDomDocument как грибы после дождя.


То есть, я хочу узнать, может быть стоит передавать таки ссылку на QDomDocument, вот так:

QDomElement Record::exportDataToDom(QDomDocument *doc) const

Исходная версия Xintrea, :

Судя по qdom.h в Qt 4.5, уже в нем был такой же механизм.

Убедил.

Но вот вопрос. У меня несколько классов, объекты последующего включены в объект текущего, грубо говоря:

- Корень
- Ветка
- Таблица записей в ветке
- Запись
- Таблица аттачей в записи
- Аттач

И вот у каждого такого класса есть метод exportDataToDom().

Методы эти вызываются по цепочке в глубину, и в конце концов формируется корневой QDomDocument.

Каждый метод принимает в параметре корневой объект QDomDocument, который нужен чтобы создать QDomElement. Если не знать корневого QDomDocument, то отдельно созданный QDomElement невозможно прилепить ни к QDomDocument, ни к QDomElement. Вот такая особенность DOM-модели в Qt.

Поэтому приходится тягать в глубины всех методов корневой QDomDocument. Я сейчас использую примерно такой код в методах exportDataToDom():

QDomElement Record::exportDataToDom(QDomDocument doc) const
{
  QDomElement elem=doc.createElement("record");

  ... 

  QDomElement att=attachTable.exportDataToDom(doc); // Проброс doc далее

  elem.appendChild( att );

  ...
}


Учитывая, что QDomDocument является Implicit Sharing объектом, то такой проброс должен приводить только к передачи указателя.

Но! Можно заметить, что в каждом методе exportDataToDom() есть команда вида:

doc.createElement("...");


Так вот я не пойму, эта команда меняет объект doc или нет? Если меняет, то у меня будут множиться эти QDomDocument как грибы после дождя.