diff options
Diffstat (limited to 'src/corelib/tools/qarraydatapointer.h')
-rw-r--r-- | src/corelib/tools/qarraydatapointer.h | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/corelib/tools/qarraydatapointer.h b/src/corelib/tools/qarraydatapointer.h index 3d850c0144..1f81689af3 100644 --- a/src/corelib/tools/qarraydatapointer.h +++ b/src/corelib/tools/qarraydatapointer.h @@ -55,6 +55,9 @@ private: public: typedef typename Data::iterator iterator; typedef typename Data::const_iterator const_iterator; + enum { pass_parameter_by_value = std::is_fundamental<T>::value || std::is_pointer<T>::value }; + + typedef typename std::conditional<pass_parameter_by_value, T, const T &>::type parameter_type; QArrayDataPointer() noexcept : d(Data::sharedNull()), ptr(Data::sharedNullData()), size(0) @@ -131,8 +134,8 @@ public: ~QArrayDataPointer() { - if (!d->deref()) { - if (d->isMutable()) + if (!deref()) { + if (isMutable()) (*this)->destroyAll(); Data::deallocate(d); } |