#include #include "TestSharedData.h" TestSharedData::TestSharedData(QObject *parent, const QString &valeur) : QObject(parent), QSharedData() { std::cout << "Constructeur de base appele : @@" << valeur.toStdString() << "@@\n"; contenu = valeur; } TestSharedData::TestSharedData(const TestSharedData &original) : QObject(original.parent()), QSharedData() { std::cout << "Constructeur de copie appele : ##" << original.contenu.toStdString() << "##\n"; contenu = QString("Copie de ").append(original.contenu); } TestSharedData &TestSharedData::operator++() { contenu = QString("<").append(contenu); return *this; } const TestSharedData TestSharedData::operator++(int) { TestSharedData snapshot(*this); contenu = contenu.append(">"); return snapshot; } const std::string TestSharedData::x() const { int ptrval = (int) this; return (contenu + "[%1]").arg(ptrval,8,16,QChar('0')).toStdString(); } void TestSharedData::lanceTests(QObject *a) { QSharedDataPointer pa(new TestSharedData(a, QString("Objet Partage"))); std::cout << "pa->x() = ##" << pa->x() << "##\n"; std::cout << "(pa++)->x() = ##" << ((*pa)++).x() << "##\n"; std::cout << "pa->x() = ##" << pa->x() << "##\n"; std::cout << "(pa++)->x() = ##" << ((*pa)++).x() << "##\n"; std::cout << "pa->x() = ##" << pa->x() << "##\n"; std::cout << "--------------------------------------\n"; QSharedDataPointer pb = pa; std::cout << "pa->x() = ##" << pa->x() << "##\n"; std::cout << "pb->x() = ##" << pb->x() << "##\n"; std::cout << "--------------------------------------\n"; QSharedDataPointer pc; pc = pa; std::cout << "pa->x() = ##" << pa->x() << "##\n"; std::cout << "pc->x() = ##" << pc->x() << "##\n"; std::cout << "--------------------------------------\n"; std::cout << "--------------------------------------\n"; const TestSharedData *t = pc.operator const TestSharedData *(); std::cout << "pc->x() = ##" << pc->x() << "##\n"; const TestSharedData *t2 = pc.operator const TestSharedData *(); std::cout << "pc->x() = ##" << pc->x() << "##\n"; std::cout << "--- t " << (t == t2 ? "==" : "!=") << " t2 !!! --------\n"; std::cout << "--------------------------------------\n"; std::cout << "--------------------------------------\n"; TestSharedData *t3 = pc.operator TestSharedData *(); std::cout << "pc->x() = ##" << pc->x() << "##\n"; TestSharedData *t4 = pc.operator TestSharedData *(); std::cout << "pc->x() = ##" << pc->x() << "##\n"; std::cout << "--- t3 " << (t3 == t4 ? "==" : "!=") << " t4 !!! --------\n"; std::cout << "=== t " << (t == t4 ? "==" : "!=") << " t4 !!! ========\n"; std::cout << "--------------------------------------\n"; std::cout << "pa->x() = ##" << pa->x() << "##\n"; std::cout << "pb->x() = ##" << pb->x() << "##\n"; std::cout << "(pa++)->x() = ##" << ((*pa)++).x() << "##\n"; std::cout << "pa->x() = ##" << pa->x() << "##\n"; std::cout << "pb->x() = ##" << pb->x() << "##\n"; std::cout << "(pa++)->x() = ##" << ((*pa)++).x() << "##\n"; std::cout << "pa->x() = ##" << pa->x() << "##\n"; std::cout << "pb->x() = ##" << pb->x() << "##\n"; // std::cout << "--------------==========--------------\n"; }