Всё таки моя реализация лучше, чем QSharedData + QSharedDataPointer. Только сейчас, попробовав QSharedData в работе, я это понял
Когда используешь QSharedDataPointer в наследнике QObject, то необходимо определить структуру Data полностью в хедере, т.к. метакомпилятор что-то там досоздает и возникает ошибка компиляции.
C++ (Qt)
class MyObject : public QObject
{
Q_OBJECT
public:
MyObject();
private:
struct Data;
QSharedDataPointer<Data> d;
};
/usr/include/qt5/QtCore/qshareddata.h:87:45: error: invalid use of incomplete type 'struct MyObject::Data'
inline ~QSharedDataPointer() { if (d && !d->ref.deref()) delete d; }
А часто хочется скрыть реализацию, упрятав её с внутренними зависимостями в cpp файл.
Более того:
1) с QSharedDataPointer надо писать больше буков. Надо создать Data во всех конструкторах, в моём случае это не надо делать, создание происходит автоматически.
2) не надо наследовать Data от QSharedData
PS. Если использовать c++11, то зависимость от буста можно выкинуть.