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

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

나는이 없다 :cliext : 벡터 및 복사 생성자

클래스 "cliext : 벡터 < _Value_t을>"사용 가능한 복사 생성자 또는 생성자 선언 복사 '명시 적'

벡터 복사를 만드는 방법은 무엇입니까?

+0

'copied-> x.Clone()'을 (를) 사용해보십시오. –

+0

cliext :: impl :: vector_impl <_Value_t, _Is_ref> :: 복제 : 숫자 오버로드에 'this'포인터에 대한 합법적 인 변환이 없습니다. – Novikoff

+0

오 잘 ... 복제하는 방법을 알아 내기 위해 'IClonable' 인터페이스의 정의를 찾아보십시오. 소지품. 나는 단지 짐작하고있다. –

답변

1

주석에서 언급했듯이 관리되는 참조 형식은^hat로 선언해야합니다. 그리고 그것들은 객체에 대해 GC 메모리를 할당하기 위해 gcnew를 사용해야하는 초기화되어야합니다. 그래서이 :

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

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

주의 마십시오 다음 복사 생성자를 제공하는 경우 당신은뿐만 아니라 할당 연산자를 제공한다고하는, 규칙의 세 스타일. STL/CLR 요구와 같은 가치 의미론을 제공하지 않는 한 참조 유형에는 거의 필요하지 않습니다. 그렇지 않은 이유는 perf is so poor입니다. 대신에 List<T>을 선호하십시오. 가비지 컬렉터를 사용하면 커다란 장점은 더 이상 파괴가 필요한 컬렉션에 대해 걱정할 필요가 없다는 것입니다.