From bd0f3345a938b35ce6a12f6150373b0955b8dd12 Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Sun, 10 Jul 2011 15:24:15 -0500 Subject: Add Qt3 development HEAD version --- doc/html/qdeepcopy.html | 168 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 doc/html/qdeepcopy.html (limited to 'doc/html/qdeepcopy.html') diff --git a/doc/html/qdeepcopy.html b/doc/html/qdeepcopy.html new file mode 100644 index 0000000..3d5cf61 --- /dev/null +++ b/doc/html/qdeepcopy.html @@ -0,0 +1,168 @@ + + + + + +QDeepCopy Class + + + + + + + +
+ +Home + | +All Classes + | +Main Classes + | +Annotated + | +Grouped Classes + | +Functions +

QDeepCopy Class Reference

+ +

The QDeepCopy class is a template class which ensures that +implicitly shared and explicitly shared classes reference unique +data. +More... +

All the functions in this class are reentrant when Qt is built with thread support.

+

#include <qdeepcopy.h> +

List of all member functions. +

Public Members

+ +

Detailed Description

+ + +The QDeepCopy class is a template class which ensures that +implicitly shared and explicitly shared classes reference unique +data. +

+

+ +

Normally, shared copies reference the same data to optimize memory +use and for maximum speed. In the example below, s1, s2, s3, s4 and s5 share data. +

+    // all 5 strings share the same data
+    QString s1 = "abcd";
+    QString s2 = s1;
+    QString s3 = s2;
+    QString s4 = s3;
+    QString s5 = s2;
+    
+ +

QDeepCopy can be used several ways to ensure that an object +references unique, unshared data. In the example below, s1, s2 and s5 share data, while neither s3 nor s4 share data. +

+    // s1, s2 and s5 share the same data, neither s3 nor s4 are shared
+    QString s1 = "abcd";
+    QString s2 = s1;
+    QDeepCopy<QString> s3 = s2;  // s3 is a deep copy of s2
+    QString s4 = s3;             // s4 is a deep copy of s3
+    QString s5 = s2;
+    
+ +

In the example below, s1, s2 and s5 share data, and s3 +and s4 share data. +

+    // s1, s2 and s5 share the same data, s3 and s4 share the same data
+    QString s1 = "abcd";
+    QString s2 = s1;
+    QString s3 = QDeepCopy<QString>( s2 );  // s3 is a deep copy of s2
+    QString s4 = s3;                        // s4 is a shallow copy of s3
+    QString s5 = s2;
+    
+ +

QDeepCopy can also provide safety in multithreaded applications +that use shared classes. In the example below, the variable global_string is used safely since the data contained in global_string is always a deep copy. This ensures that all threads +get a unique copy of the data, and that any assignments to global_string will result in a deep copy. +

+    QDeepCopy<QString> global_string;  // global string data
+    QMutex global_mutex;               // mutex to protext global_string
+
+    ...
+
+    void setGlobalString( const QString &str )
+    {
+        global_mutex.lock();
+        global_string = str;           // global_string is a deep copy of str
+        global_mutex.unlock();
+    }
+
+    ...
+
+    void MyThread::run()
+    {
+        global_mutex.lock();
+        QString str = global_string;          // str is a deep copy of global_string
+        global_mutex.unlock();
+
+        // process the string data
+        ...
+
+        // update global_string
+        setGlobalString( str );
+    }
+    
+ +

Warning: It is the application developer's responsibility to +protect the object shared across multiple threads. +

The examples above use QString, which is an implicitly shared +class. The behavior of QDeepCopy is the same when using explicitly +shared classes like QByteArray. +

Currently, QDeepCopy works with the following classes: +

+

See also Thread Support in Qt, Implicitly and Explicitly Shared Classes, and Non-GUI Classes. + +


Member Function Documentation

+

QDeepCopy::QDeepCopy () +

+ +

Constructs an empty instance of type T. + +

QDeepCopy::QDeepCopy ( const T & t ) +

+ +

Constructs a deep copy of t. + +

QDeepCopy::operator T () +

+ +

Returns a deep copy of the encapsulated data. + +

QDeepCopy<T> & QDeepCopy::operator= ( const T & t ) +

+ +

Assigns a deep copy of t. + + +


+This file is part of the Qt toolkit. +Copyright © 1995-2007 +Trolltech. All Rights Reserved.


+ +
Copyright © 2007 +TrolltechTrademarks +
Qt 3.3.8
+
+ -- cgit v1.2.3