2015-02-24 2 views
0

У меня есть некоторый код, как это:Какая правильная форма для конструктора копии C++ - CLI?

MyClass::MyClass(MyClass^ objToCopyFrom); 

Что вызывает ошибку:

'type' : ref class does not have a user-defined copy constructor

Когда я смотрю the error, это предполагает мой код должен выглядеть следующим образом:

MyClass::MyClass(MyClass% objToCopyFrom); 

Мой вопрос, поэтому, какая версия верна или они оба правильные?

ответ

1

Только ваша вторая версия верна:

MyClass::MyClass(MyClass% objToCopyFrom); 

или ее вариант:

MyClass::MyClass(const MyClass% objToCopyFrom); 

MyClass% является так называемый Tracking Reference, который является концептуальной эквивалентности ссылки на родном C++, только для CLR.

Хотя copy constructors in native C++ может иметь целый ряд различных подписей, то, что все они имеют в общем, что объект другого, который копируется передается в качестве ссылки. C++/CLI остается близким к этому принципу, но использует собственный тип ссылок на объекты, ссылку на отслеживание.

+0

Звучит правильно, хотя я читал, что CLI игнорирует 'const', который вы упоминаете. –