2011-05-11 55 views
5

我們的代碼中有一門課,比如C。我想創建一個類C的對象的向量。但是,複製構造函數和賦值運算符都被故意聲明爲private。我不想(也許不允許)改變這一點。具有私人複製構造函數的類的C + + stl向量?

是否有其他乾淨的方式使用/定義vector<C>

回答

8

您可以改用vector<C*>vector<shared_ptr<C>>

+2

不是如果你關心性能... – Tara 2015-05-11 01:29:24

1

不,它不是,std::vector需要可分配的概念。 C的作者必須有一個很好的理由來禁止這一點,你必須堅持他們提供的任何東西來複制/分配C的實例。您可以使用上面建議的指針,也可以使用其他機制來複制/分配自己。在後一種情況下,您可以爲C編寫可分配的代理類型。

1

我設法只用兩個朋友做:

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。

+0

這不適用於Visual Studio Express 2015 – 2016-09-05 19:57:46