2012-01-10 26 views
0

我有這個類:追加到隊列中,而無需調用析構函數

class user 
{ 
private: 
    string userid; 
    string password; 
public: 
    user(){}; 
    user(string a, string b){userid = a; password = b;} 
    ~user(){cout<<"Trace";}; 
    void print (ostream& out); 
}; 

每次我嘗試這種方式添加到我的隊列aqueue.append(user(userid, password);將追加到我的隊列,但隨後就會調用析構函數。隊列是指向下一個單元格的基本通用鏈接列表。我的問題是:如何將每次向析構函數調用時添加到隊列中?

+0

假設你的隊列像'std :: queue'一樣工作,你不能。將對象複製到隊列中,並且原件被銷燬。看起來你和你的隊列一樣。 – 2012-01-10 05:37:14

+0

@BillyONeal我可以用指針來解決這個問題嗎? – 2012-01-10 05:38:07

+0

@Joe:是的;但額外的內存分配將花費遠遠超過幾個析構函數調用。 (老實說,在大多數情況下,鏈表都是一個可怕的數據結構;你最好使用類似std :: deque或者循環緩衝的方式) – 2012-01-10 05:39:31

回答

1

將指針(例如原始指針,std::auto_ptr,std::unique_ptr)存儲到您希望存儲的對象中,而不是對象本身。

1

看起來您正在創建堆棧&中的對象,將它傳遞給隊列進行追加。 而隨着隊列接受對象(不是指針或引用),它可能會深度複製對象&,原始對象的作用域完成後將被刪除(破壞)。

使用堆上的新運算符創建對象&然後使用引用或指針傳遞它。

+0

我該怎麼做? – 2012-01-10 05:43:19

+0

隊列是你自己的類還是STL? – 2012-01-10 06:00:34

相關問題