2012-11-12 132 views
0

返回一般pair<iterator,bool>實現插入功能時,STL庫 我實現STL式的類。可我在對返回一個迭代的局部變量,即迭代器實現

itartor it;//init it 
return pair<iterator,bool>(it,true); 

,或者我應該動態分配迭代器即:

itartor it = new iterator; 
return pair<iterator,bool>(*it,true); 
+1

事實上,一個版本包含單詞'new'應該會提示你哪一個是錯的:-) –

+1

在第二次閱讀時,第二個版本完全瘋了:你只是最終制作一個動態拷貝*分配迭代器並按值返回該副本。瘋狂。 (並且它實際上並沒有編譯。) –

回答

2

你應該使用第一個選項。第二,沒有任何理由,因爲無論如何你都在反引用指針。並泄漏內存:

iterator it = new iterator; 
return pair<iterator,bool>(*it,true); 
          ^dereference here -> memory leak. 

標準庫迭代器被設計爲按值傳遞。你應該確保你的迭代器複製很便宜,並且避免所有動態內存管理缺陷。

+1

我認爲「prefer」在這裏完全不適用。 「無條件地必須」更接近事實。 –

2

按值返回迭代器。迭代器被設計爲輕量級和可複製的。

0

永遠不要返回動態分配的內容,除非你知道你在做什麼(你能妥善處理)。因此,與第一個一起去。

鑑於你甚至不能在這裏返回一個指針的事實,這是不行的(在你的代碼示例,你還是會創建分配的對象/內存的複印件)。