2011-10-13 73 views
1

我設計一個包裝類的重新分配(有點類似std::autoPtr但我有不同的目的):WrapperPointer類和C++堆棧分配的對象

template <typename T> 
class ScalarPtr 
{ 
private: 
    T* m_data; 
    ... 
public: 
    ScalarPtr(T *data): m_data(data) 
    { ... } 
    T& operator*(); 
    T* operator ->(); 
    ~ScalarPtr() 
    { 
     if(m_data) 
     delete m_data; ... 
    } 
}; 

現在的問題是,當我也想用這個類棧上分配的內存對象是這樣的:

float temp=... 
ScalarPtr<float> fltPtr(&temp); 

用簡單的方式是通過在布爾構造函數指定是否要解除或沒有,但有沒有更好的辦法?

回答

2

我不確定是否有比布爾標誌更好的方法。如你所知(並因此詢問Q),這使得界面對於最終用戶而言是非直觀的。

包裝器/資源管理類的目的是實現RAII,其中資源本身負責隱式釋放其資源(在這種情況下是動態存儲器)。鑑於堆棧變量會自動銷燬超出其範圍,因此使用資源管理包裝器似乎很奇怪。我寧願不願意這樣做。

但是,鑑於你想通過這個包裝類來保持對你的類的統一接口,最簡單但並不那麼優雅的方式似乎是布爾標誌。

+1

+1:Boost使用額外的參數將自定義刪除器傳遞給'shared_ptr',所以他們似乎認爲它沒事(布爾標誌命中相同的靜脈)。 –

+0

@Björn:我認爲助推的主要動機是需要用不同功能發佈的資源。 – visitor