Listing 9
public ref class Test : ICloneable
{
int data;
static int objectCount = 0;
public:
Test()
{
data = 0;
++objectCount;
}
Test(int value)
{
data = value;
++objectCount;
}
virtual String^ ToString() override
{
return String::Concat(data, ", ", objectCount);
}
virtual Object^ Clone()
{
/*1*/ Test^ copy = static_cast<Test^>(MemberwiseClone());
/*2*/ ++objectCount;
return copy;
}
};
int main()
{
/*3*/ Test^ t1 = gcnew Test;
Console::WriteLine("t1 using new: {0}", t1);
/*4*/ Test^ t2 = static_cast<Test^>(t1->Clone());
Console::WriteLine("t2 using Clone: {0}", t2);
/*5*/ Test^ t3 = gcnew Test(1);
Console::WriteLine("t3 using new: {0}", t3);
/*6*/ Test^ t4 = static_cast<Test^>(t3->Clone());
Console::WriteLine("t4 using Clone: {0}", t4);
}
}