QObject 계열을 상속받아 사용한다는 가정하에
1.
QScopedPointer<className > widget(new className);
className->myfunction;
2.
QWidget * mywidget = new QWidget(this);
이거 두개로 종결
QScopedPointer는 외부 클래스에서 사용되지 않는 동적 메모리에 한해 예외상황이 발생해도 메모리 누수없이 자동적으로 Delete역활을 해준다. ( private에 Q_DISABLE_COPY 매크로 선언 필수(Deep Copy 미지원))
일반적인 객체를 삽입해도 내부적으로 포인터처럼 사용할 수 있는 객체이다. 그냥 c++11 의 유니크 포인터와같다.
두번째 부분은 Qt좀 해본사람이라면 다알겠지만 QObject 상속계통의 메모리를 자신의 부모객체에
OnwerShip을 넘겨 안전하게 자동 삭제 하는 방법이다.
AllocForget 패턴이라고 불리기도하는데 저거 두개는 QString만큼 자주쓰는 유용한 메모리 관리방식이다 강추하는 바이다.
ps. 둘다 delete가 필요없으며 QScopedPointer는 delete하면 컴파일 에러난다.
ps2. 둘다 예외상황에서도 delete를 자동으로 하나 내가원하는 타이밍에 delete하려면 따로 처리를 해야한다.
ps3. OnwerShip을 지원하지 않는 Qt라이브러리가 있다 꼭 doc(F1과 Example은 너와 나의 친구)을 보고 유무를 확인하고 사용한다.
'Qt' 카테고리의 다른 글
Qt의 Drag&Drop Example (0) | 2016.11.17 |
---|---|
QLineEdit에서 한글입력하기 우분투 14.04 (QT4.8기준) (0) | 2016.11.17 |
Qt에서 한글쓰고싶다면 (0) | 2016.11.17 |
Qt와 BLE (0) | 2016.11.17 |
우분투 버전 갈아타기 (0) | 2016.11.17 |