我們的代碼中有一門課,比如C
。我想創建一個類C
的對象的向量。但是,複製構造函數和賦值運算符都被故意聲明爲private
。我不想(也許不允許)改變這一點。具有私人複製構造函數的類的C + + stl向量?
是否有其他乾淨的方式使用/定義vector<C>
?
我們的代碼中有一門課,比如C
。我想創建一個類C
的對象的向量。但是,複製構造函數和賦值運算符都被故意聲明爲private
。我不想(也許不允許)改變這一點。具有私人複製構造函數的類的C + + stl向量?
是否有其他乾淨的方式使用/定義vector<C>
?
您可以改用vector<C*>
或vector<shared_ptr<C>>
。
不,它不是,std::vector
需要可分配的概念。 C的作者必須有一個很好的理由來禁止這一點,你必須堅持他們提供的任何東西來複制/分配C
的實例。您可以使用上面建議的指針,也可以使用其他機制來複制/分配自己。在後一種情況下,您可以爲C
編寫可分配的代理類型。
我設法只用兩個朋友做:
template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
friend class std::vector;
template<typename _T1, typename _T2>
friend void std::_Construct(_T1* __p, const _T2& __value);
把它們放在你的類聲明瞧裏面!
我使用的是gcc 5.3.1。
這不適用於Visual Studio Express 2015 – 2016-09-05 19:57:46
不是如果你關心性能... – Tara 2015-05-11 01:29:24