2012-10-15 101 views
0

對於內部有子類或結構的類,重置它的最優雅的方法是什麼?最優雅的方法來重置類

class attributes { 
public: 
    std::string address; 
    short  port; 
    std::vector<std::string> data; 
    struct Foo foo; 
}; 

什麼是在一個循環中最優雅,默認運算符=單位所建立的復位方法memoring 0結構memset(...)

attributes obj, originalStateToResetObj; 
    for(;;) 
     //do stuff with obj 
     obj.address = "172.0.0.1" 
     //etc 
     //reseting obj using operator= 
     obj = originalStateToResetObj; 
     // OR using Reset? 
     obj.Reset(); 
    } 

其他優雅的建議?

+11

最優雅的方法是每次需要時創建一個新實例。 – juanchopanza

+0

@juanchopanza&這應該是一個答案。 –

+0

但內存昂貴...不會? –

回答

2

這完全取決於手頭的課程。一般來說,正確的做法是從頭創建一個新的或使用類的拷貝構造函數,但是如果它使用昂貴的資源,例如打開一個IMAP連接(因爲IMAP服務器通常會嚴格限制每個用戶允許的連接數量,所以可以想到這個例子),那麼這會產生非常不希望的副作用。

如果一個類沒有零參數構造函數,那麼將其重置爲某種默認狀態就沒有多大意義,因此您也需要考慮這一點。

如果存在需要保留的有意義的中間狀態,請考慮記事本設計模式。

+0

爲每次交互創建一個新的對象將會是內存昂貴,調零實際會花費很多=/ –

+0

調零實際並不安全 - 您是否在共享指針?沒有釋放更深的記憶?將對象置於完全無效的狀態?這是C++,不是彙編。 – djechlin

+0

這裏沒有指針@djechlin –

相關問題