我有一個類test
這是不標準施工的,也不分配由於某些原因。然而它是可複製的 - 可以說它的行爲有點像參考。置換矢量接受非標準施工的和未分配的類型
不幸的是,我需要這些元素的動態數組,並意識到vector<test>
不是正確的選擇,因爲矢量的元素必須是標準的可構建和賦值的。好在我解決此問題得到了通過使用vector<T>::reserve
和vector<T>::push_back
代替vector<T>::resize
和直接填充項(無標準建設)
用於分配的copy'n'swap把戲,事實上,一個vector
是
- 通常使用平普爾-成語(現有
test
元件沒有直接的分配)來實現,即class base { private: std::vector<test> vect; /* ... */ public: /* ... */ base& operator= (base y) { swap(y); return *this; } void swap(base& y) { using std::swap; swap(vect, y.vect); } /* ... */ };
現在我假設我可能沒有考慮過每一點點,而最重要的是這些技巧強烈依賴於實施。該標準只保證標準可構造和可分配類型的標準行爲。
下一步是什麼?我如何獲得test
對象的動態數組?
備註:我一定比較喜歡內置的標準C++提供的解決方案和類。
編輯:我才意識到,我的招數竟然沒有工作。如果我定義了一個真正的非賦值類,那麼我的編譯器會出現很多錯誤。所以這個問題凝結到最後一個問題:我怎樣纔能有這些test
對象的動態數組?
(*)我的test
類提供了一個賦值運算符,但是這個運算符就像賦值給一個引用一樣。
我不確定我是否明白這句話:「一個矢量通常是用Pimpl-idiom實現的」在幾乎所有的編譯器上,矢量都是一個僅包含頭文件。 (如果不是每個) – GManNickG 2009-12-16 09:35:12
在GNU標準庫中,矢量是一個類,它基本上包含一個指向內部類的指針,該指針提供了完整的矢量功能。矢量類只轉發這個功能。我認爲這是pimpl習語的意思。我錯了嗎? – phlipsy 2009-12-16 09:48:31
不,你完全正確。 GMan錯誤地將pimpl習語與使用該習語的常見理由混爲一談。 – MSalters 2009-12-16 09:51:15