2011-04-19 3 views

답변

4

QList는 개체 복사본을 저장하므로 제대로 작동합니다. 그러나 실제로 복사가 원하는대로 이루어 졌는지 확인하십시오. 그렇지 않은 경우 객체를 new으로 할당하고 포인터를 QList에 저장합니다.

-2

아니요. QList는 오브젝트에 대한 포인터 목록을 저장하므로 지역 변수는 전역 QList에 저장되어서는 안됩니다.

체크 아웃 상세이 링크는 :

http://twl.pl/jtz/Inne/QT-Tutorial/qlist.html#details

+1

대단히 오래된 것입니다. 그 QList는 오늘의 QList와 완전히 다릅니다. 이것은 Qt4의 현재 QList입니다 : http://doc.qt.nokia.com/latest/qlist.html. QList 은 A 객체의 사본 인 QList A 객체의 포인터를 저장합니다. 이 시나리오에서는 가능하면 복사본을 저장하는 것이 좋으며 안전합니다. –

0

QList에는 내용에 대한 포인터 만 있습니다. 따라서 QList의 복사본을 만들 때마다 실제로 모든 내용을 복사하지 않고 포인터를 복사하기 만하면됩니다. 목록을 수정할 때마다 사본이 만들어져 다른 객체의 내용을 수정하지 않도록합니다. 참조 : http://doc.qt.nokia.com/4.7-snapshot/qshareddatapointer.html

QList는 복사 생성자를 사용하므로 개체에 많은 양의 데이터가 포함되어 있으면 목록을 확장해야 할 때 일부 오버 헤드가 발생할 수 있으므로 QList에서 직선 개체를 사용하는 것은 좋지 않을 수 있습니다 .

또 다른 솔루션은 QSharedDataPointer를 사용하여 QList와 비슷한 기능을 만드는 것입니다.

Qt 클래스의 대부분은 이미 이것을 사용하고 있으므로 클래스에 여기에 나열된 것들이 포함되어 있다면 : http://doc.qt.nokia.com/4.7-snapshot/implicit-sharing.html QSharedDataPointer를 사용하는 것은 다소 불필요합니다.

관련성이 있다는 것을 분명히하지 않은 것이 하나 있다고 생각합니다. 전역 정적 객체 A가 목록의 객체와 동일한 데이터를 가지기를 원합니 까?

이것은 포인터 또는 QExplicitlySharedDataPointer를 사용하여 달성 할 수 있습니다.

QExplicitlySharedDataPointer는 한 가지 예외가 있지만 QSharedDataPointer와 거의 같습니다. 수정 된 데이터 사본을 만들지 않습니다. 여기에 몇 가지 문서가 있습니다. http://doc.qt.nokia.com/4.7-snapshot/qexplicitlyshareddatapointer.html

저는 이러한 클래스를 많이 사용했습니다. I'v는 매우 유용하고 전혀 사용하지 않는 것으로 나타났습니다.

관련 문제