Qt 4.8
Classes | Functions
qatomic.h File Reference
#include <QtCore/qglobal.h>
#include <QtCore/qbasicatomic.h>

Go to the source code of this file.

Classes

class  QAtomicInt
 The QAtomicInt class provides platform-independent atomic operations on integers. More...
 
class  QAtomicPointer< T >
 The QAtomicPointer class is a template class that provides platform-independent atomic operations on pointers. More...
 

Functions

template<typename T >
void qAtomicAssign (T *&d, T *x)
 This is a helper for the assignment operators of implicitly shared classes. More...
 
template<typename T >
void qAtomicDetach (T *&d)
 This is a helper for the detach method of implicitly shared classes. More...
 

Function Documentation

◆ qAtomicAssign()

template<typename T >
void qAtomicAssign ( T *&  d,
T *  x 
)
inline

This is a helper for the assignment operators of implicitly shared classes.

Your assignment operator should look like this:

Definition at line 195 of file qatomic.h.

Referenced by QColormap::hPal(), QSqlRecord::operator=(), QSqlField::operator=(), QSqlQuery::operator=(), QColormap::operator=(), QDBusMessage::operator=(), QPen::operator=(), QDBusArgument::operator=(), QSqlDatabase::operator=(), QUrl::operator=(), QKeySequence::operator=(), and qt_conv16ToRgb().

196 {
197  if (d == x)
198  return;
199  x->ref.ref();
200  if (!d->ref.deref())
201  delete d;
202  d = x;
203 }
double d
Definition: qnumeric_p.h:62

◆ qAtomicDetach()

template<typename T >
void qAtomicDetach ( T *&  d)
inline

This is a helper for the detach method of implicitly shared classes.

Your private class needs a copy constructor which copies the members and sets the refcount to 1. After that, your detach function should look like this:

Definition at line 214 of file qatomic.h.

Referenced by QSqlField::detach(), QSqlRecord::detach(), QScopedSharedPointer< QScriptDebuggerConsoleCommandGroupDataPrivate >::detach(), operator>>(), QUrl::resolved(), and QKeySequence::setKey().

215 {
216  if (d->ref == 1)
217  return;
218  T *x = d;
219  d = new T(*d);
220  if (!x->ref.deref())
221  delete x;
222 }
double d
Definition: qnumeric_p.h:62