2016-03-05 46 views
0

我想用C++設計模式來設計和編寫一個類。在我的原始類中,我只有一個數據成員,它從名爲MyClassData的QSharedData繼承,以及一些成員函數。現在我的問題是,如果MyClassData包含指針,我應該如何在該類中定義該指針?qt設計中C++類指針成員的正確設計

下面的代碼將清楚我的問題:

class MyClassData : public QSharedData { 
public: 
    MyClassData(); 
    // one of these pointers is correct ? 
    int * myNormalPointer; 
    QSharePointer<int> myQSharedPointer; 
    QScopedPointer<int> myQScopedPointer; 
}; 
class MyClass { 
public: 
    MyClass(); 
    // and some other member functions ... 
    QSharedDataPointer<MyClassData> data; 
} 

如果我的問題不會被關閉!我想請問通常是正確的總是從一個類的成員字段,定義指針避免?

回答

1

從看QT文檔..

http://doc.qt.io/qt-4.8/qsharedpointer.html

http://doc.qt.io/qt-4.8/qscopedpointer.html

QSharedPointer基本上std::shared_ptr,QScopedPointer基本上是std::unique_ptr,向其中加入在C++ 11。

所有這些「智能指針」的表現不同,應在不同的環境中使用,但他們都爲delete在堆上荷蘭國際集團動態分配的內存時,它不應再使用,如何實現這一點取決於使用的智能指針的類型。

如果指針應該是僅供參考(即對象沒有「擁有」的內存(沒有責任delete吧)),只需使用int*。如果它是動態分配的,請查看這些智能指針,無論是QSharedPointerQScopedPointerstd::shared_ptrstd::unique_ptr

TL; DR,看看如何使用std::unique_ptrstd::shared_ptr,它們非常相似。

1

如果你想保持你班級的Qt設計風格,你必須在QSharedPointer<int> myQSharedPointerQScopedPointer<int> myQScopedPointer之間進行選擇。不同之處在於QSharedPointer<int>QScopedPointer<int>更復雜,提供線程安全性和更多調試信息。 QScopedPointer<int>適用於簡單的任務。

+0

這完全折扣了'QScopedPointer'和'QSharedPointer'之間的巨大差異,它應該決定使用哪一個。 –