2014-05-24 143 views
1
ref class A 
{ 
public: 
    cliext::vector<int> x; 

    A(void); 
    A(const A^ copied): 
     x(copied->x){}; 
}; 

我:cliext ::向量和拷貝構造函數

類 「cliext :: vector的< _Value_t>」:沒有拷貝構造函數可用的或拷貝構造函數是 聲明 '明確'

如何製作矢量副本?

+0

嘗試'copied-> x.Clone()'? –

+0

cliext :: impl :: vector_impl <_Value_t,_Is_ref> ::克隆:數字重載沒有針對'this'指針的合法轉換 – Novikoff

+0

噢好吧...查看'IClonable'接口的定義來弄清楚如何克隆的東西。我只是猜測。 –

回答

1

如註釋中所述,託管引用類型必須使用^帽來聲明。並且它們必須被初始化,這需要使用gcnew爲對象分配GC內存。因此,它是:

ref class A { 
public: 
    cliext::vector<int>^ x; 

    A() : x(gcnew cliext::vector<int>) {} 
    // etc.. 
}; 

請注意,如果你提供一個拷貝構造函數,那麼你應該提供賦值運算符,以及,規則的三個風格。這很少需要引用類型,除非你給它們賦值語義如STL/CLR需求。否則的原因是perf is so poor。不要強烈支持List<T>。擁有垃圾收集器的一大優勢是您不必擔心需要銷燬的集合中的對象。