Skip to content

Shared pointer and regular mode

Hamed Masafi edited this page Feb 15, 2020 · 2 revisions

Nut can compile in shared pointer mode or regular mode

In shared pointer mode reqults 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.

To compiling in shared pointer define NUT_SHARED_POINTER macro

Nut has template alias

#ifdef NUT_SHARED_POINTER
    template <class T>
    using RowList = QList<QSharedPointer<T>>;

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

    template <typename T>
    using Row = 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_SHARED_POINTER
    template<class T>
    inline Row<T> create() {
        return QSharedPointer<T>(new T);
    }
#else
    template<class T>
    inline Row<T> create() {
        return new T;
    }
#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_SHARED_POINTER is defined post is QSharedPointer else is Post*

I recommand use NUT_SHARED_POINTER always!

Table of contents

Clone this wiki locally