У меня несколько классов, объекты последующего включены в объект текущего, грубо говоря:
- Корень
- Ветка
- Таблица записей в ветке
- Запись
- Таблица аттачей в записи
- Аттач
И вот у каждого такого класса есть метод 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