实例解析C++/CLI的"克隆"[VC/C++编程]
本文“实例解析C++/CLI的"克隆"[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
C++/CLI不但支持基于仓库的对象,同时也支持基于堆的对象;但是,假如想与其他基于CLI的语言(如C#、J#、Visual Basic)举行互操作的话,必必要清楚地知道,这些语言只支持基于堆的对象;当处于基于堆的对象环境中时,你与对象之间,永久只有"一臂之遥",比方说,两个给定的句柄h1与h2,只有在为这种句柄范例定义了呼应的赋值操作符时,*h1 = *h2才会工作正常,而对C++/CLI之外的其他语言中的范例来说,情形大概就不是这样了.一样地,一个顺从CLS的机制需求成立对象的一份副本,这种机制被称为"克隆".
利用CLI库中的Clone函数
请看例1中的代码,其利用了近似于矢量的一个System::ArrayList类,插1是程序的输出.
例1:
using namespace System;
using namespace System::Collections;
void PrintEntries(String^ s, ArrayList^ aList);
int main()
{
ArrayList^ al1 = gcnew ArrayList;
/*1*/ al1->Add("Red");
al1->Add("Blue");
al1->Add("Green");
al1->Add("Yellow");
/*2*/ PrintEntries("al1", al1);
/*3*/ ArrayList^ al2 = static_cast<ArrayList^>(al1->Clone());
/*4*/ PrintEntries("al2", al2);
/*5*/ al1->Remove("Blue");
al1->Add("Black");
al1->RemoveAt(0);
al1->Insert(0, "Brown");
/*6*/ PrintEntries("al1", al1);
/*7*/ PrintEntries("al2", al2);
}
void PrintEntries(String^ s, ArrayList^ aList)
{
Console::Write("{0}: ", s);
for each(Object^ o in aList)
{
Console::Write(" {0}", o);
}
Console::WriteLine();
}
以上是“实例解析C++/CLI的"克隆"[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |