QT中有一些很精妙、便捷的設計,在了解這些數據的同時,我們可以學到如何更好的設計代碼。本貼持續更新中,歡迎關注和收藏
- 一 QScopedPointer
- 主要特點:
- 示例代碼
- 二 Q_DISABLE_COPY
一 QScopedPointer
QScopedPointer 是 Qt 中的一種智能指針,它的主要作用是管理動態分配的內存,確保在指針離開作用域時自動釋放內存,從而避免內存泄漏。
主要特點:
-
自動內存管理:
QScopedPointer 在作用域結束時自動銷毀所指向的對象,調用其析構函數并釋放內存。這樣可以確保無論正常退出作用域,還是通過異常退出作用域,都會自動釋放資源,減少內存泄漏的風險。 -
無拷貝構造函數:
QScopedPointer 不允許拷貝構造和拷貝賦值操作,因此它的所有權是獨占的。這個特性確保了不會意外地復制指針,避免了重復刪除相同內存的風險。 -
使用場景:
適用于需要自動管理堆上對象生命周期的情況,特別是在不需要共享所有權的場景中。
示例代碼
#include <QScopedPointer>
#include <QDebug>class MyClass {
public:MyClass() {qDebug() << "MyClass created";}~MyClass() {qDebug() << "MyClass destroyed";}
};int main() {{QScopedPointer<MyClass> ptr(new MyClass);// ptr 的作用域結束后會自動調用析構函數} // 離開作用域,MyClass 對象會被銷毀return 0;
}
二 Q_DISABLE_COPY
Q_DISABLE_COPY(MarkerPointRecognitionPage);
顯式禁用拷貝構造函數和賦值運算符。
這意味著 MarkerPointRecognitionPage 類不能被拷貝或賦值,這是一個非常好的做法,尤其是當類內部有指針成員(如 QScopedPointer)時,拷貝操作通常會導致淺拷貝或資源管理上的問題。