C++-CLI 复制构造函数的正确形式是什么?

Which is the correct form for a C++-CLI copy constructor?

我有一些这样的代码:

MyClass::MyClass(MyClass^ objToCopyFrom);

产生错误:

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

当我查找 the error 时,它建议我的代码应该如下所示:

MyClass::MyClass(MyClass% objToCopyFrom);

因此,我的问题是,哪个版本是正确的或者它们都正确?

只有你的第二个版本是正确的:

MyClass::MyClass(MyClass% objToCopyFrom);

或其变体:

MyClass::MyClass(const MyClass% objToCopyFrom);

MyClass% 是所谓的 Tracking Reference,它是本机 C++ 中引用的概念等价物,仅适用于 CLR 类型。

虽然 copy constructors in native C++ 可以有许多不同的签名,但它们的共同点是被复制的 other 对象作为 参考。 C++/CLI 保持接近该原则,但使用其自己的对象引用类型,即跟踪引用。