2014-05-24 147 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>。拥有垃圾收集器的一大优势是您不必担心需要销毁的集合中的对象。