Russian Qt Forum

Qt => Общие вопросы => Тема начата: Martiro от Март 24, 2008, 16:22



Название: QPointArray и DeepCopy в QT3
Отправлено: Martiro от Март 24, 2008, 16:22
Объясните пожалуйста, как правильно скопировать один QPointArray в другой. Так, чтобы не осталось ссылки на копируемый?..
QT 3.3.3


Название: Re: QPointArray и DeepCopy в QT3
Отправлено: Sergeich от Март 24, 2008, 16:28
Мля! В ассистанте черным по белому написано:
Цитировать
Note that because this class is a QMemArray, copying an array and modifying the copy modifies the original as well, i.e. a shallow copy. If you need a deep copy use copy() or detach(), for example:
Код:
        void drawGiraffe( const QPointArray & r, QPainter * p )
        {
            QPointArray tmp = r;
            tmp.detach();
            // some code that modifies tmp
            p->drawPoints( tmp );
        }
If you forget the tmp.detach(), the const array will be modified.


Название: Re: QPointArray и DeepCopy в QT3
Отправлено: pastor от Март 24, 2008, 16:30
Цитировать
QPointArray QPointArray::copy () const

Creates a deep copy of the array.

Оно?


Название: Re: QPointArray и DeepCopy в QT3
Отправлено: Martiro от Март 24, 2008, 16:36
И как это работает?
Если я напишу:
Код:
QPointArray A;
//  заполняю его какими-то значениями.
QPointArray B;
A.detach();
B=A;

Ссылка в массиве В на массив А останется?

Или как написать?
Может так:
Код:
B=A.copy();


Название: Re: QPointArray и DeepCopy в QT3
Отправлено: Sergeich от Март 24, 2008, 16:59
Правильно так:
Код:
QPointArray A;
// fill A
QPointArray B;
B = A;
B.detach();
или так:
Код:
QPointArray A;
// fill A
QPointArray B;
B = A.copy();
Как все это работает читать здесь: http://doc.trolltech.com/qq/qq02-data-sharing-with-class.html
Перевод тут: http://qt.osdn.org.ua/data-sharing.html