大家知道,Prototype pattern 就是通过copy原型来创建新的对象,其中有shallow copy versus deep copy;shallow copy在COM中就是重用的概念,由组件的reference count控制对象的释放。而deep copy在C++语言中可以简单地理解为拷贝构造函数(当然不仅仅那样)。
我想和大家讨论讨论deep copy的问题,尤其是在组件中的应用。
如果原型中引用了其他的对象,在clone时就比较麻烦,内存拷贝好像行不通。如果是简单的原型(没有应用对象或其它复杂情况),memcopy勉强行得通。但是,现实并不是这样,怎样理想的实现deep copy,并且在组件形式中实现(二进制级别)?
我想和大家讨论讨论deep copy的问题,尤其是在组件中的应用。
如果原型中引用了其他的对象,在clone时就比较麻烦,内存拷贝好像行不通。如果是简单的原型(没有应用对象或其它复杂情况),memcopy勉强行得通。但是,现实并不是这样,怎样理想的实现deep copy,并且在组件形式中实现(二进制级别)?
解决方案 »
- 不同类下的 相同消息函数有神区别
- 窗口剪裁if ( pRgnData->nCount >= cBlocks * MAXBUF )//为什么要判断是否空间足够?
- SHSQL.DLL 必须得文件不能装载 请重新安装Visual C++
- CImageList//Create函数的dx,dy参数什么意思?
- 视频处理需要哪些技术?
- ajax页面textarea无法赋值
- 这个网络编程问题,.net那里没人会,看看这里的高手有没有?
- 我在使用createthread创建线程时出现下面的问题,重分相谢!
- 各位,上次问的MFC怎样调用其他的程序可以举例子吗??
- 图像保存
- regsvr32注册DLL(OCX)出错的问题。
- 发现windows程序没有main(),那么他们从那开始执行的呢?——新手,请多指教
对于对象调用clone,
private CEmpData CreateDeepCopy()
{
CEmpData objEmpCopy;
Stream objStream;
BinaryFormatter objBinFormatter = new BinaryFormatter();
try
{
objStream = File.Open("Empdata.bin", FileMode.Create);
objBinFormatter.Serialize(objStream, this);
objStream.Close();
objStream = File.Open("Empdata.bin", FileMode.Open);
objEmpCopy = (CEmpData)objBinFormatter.Deserialize(objStream);
objStream.Close();
return objEmpCopy;
}
catch(Exception ex)
{
Console.WriteLine (ex.ToString());
return null;
}
}
-----------------------------------------------------
上面的CEmpData 类实现了deep copy
看样子是把类保存为二进制文件了
大家对这样的方法有何褒贬?