Skip to content

Latest commit

 

History

History
59 lines (44 loc) · 1.68 KB

sharedpointer.md

File metadata and controls

59 lines (44 loc) · 1.68 KB

Nut can compile in shared pointer mode or regular mode

In shared pointer mode results of queries is QList<QSharedPointer> and in regular mode results are QList<T*>

Almost in every case shared pointer mode is better, But nut support regular mode for backward comptability.

By default Nut compiles in shared pointer mode, to switch to ols raw pointer mode you must define NUT_RAW_POINTER macro

Nut has template alias

#ifdef NUT_RAW_POINTER
    template <typename T>
    using RowList = QList<T*>;

    template <typename T>
    using Row = T*;
#else
    template <typename T>
    using RowList = QList<QSharedPointer<T>>;

    template <typename T>
    using Row = QSharedPointer<T>;
#endif

In other words these types are defined by this table:

Mode Nut::Row Nut::RowList
Regular T* QList<T*>
Shared pointer QSharedPointer<T> QList<QSharedPointer<T>>

For the integration of your source, you can use these aliases.

Ans also Nut::create() method are defined for two mode

#ifdef NUT_RAW_POINTER
    template<class T>
    inline Row<T> create() {
        return new T;
    }
#else
    template<class T>
    inline Row<T> create(QObject *parent) {
        return QSharedPointer<T>(new T(parent));
    }
#endif

So you can use the Nut::create function without considering in what way the library is being compiled. Example:

auto post = Nut::create<Post>();

In above example if NUT_RAW_POINTER is defined post is Post* else is QSharedPointer

I recommand use shared pointer mode (default) always!