查看: 2024|回复: 3

关于clone函数的问题

[复制链接]

该用户从未签到

发表于 2009-9-29 19:51:57 | 显示全部楼层 |阅读模式
osg::Group* g=dynamic_cast<osg::Group*>(node->clone(osg::CopyOp:EEP_COPY_ALL));
我写了一个继承自MatrixTransform的节点OsgTransformPoints,可以对该节点的子节点进行拖动。
使用DEEP_COPY_ALL复制该节点,替换被复制节点,虽然数据都复制出来了,而且屏幕上也显示了,
但为什么不能拖动了。
使用SHALLOW_COPY复制该节点,替换被复制节点,却可以继续拖动。请这是为什么?
另外问一下,以下复制方式都有那些区别,何种情况下调用?
期待各位解答一下,谢谢了!
enum Options
{
    SHALLOW_COPY                = 0,
    DEEP_COPY_OBJECTS           = 1<<0,
    DEEP_COPY_NODES             = 1<<1,
    DEEP_COPY_DRAWABLES         = 1<<2,
    DEEP_COPY_STATESETS         = 1<<3,
    DEEP_COPY_STATEATTRIBUTES   = 1<<4,
    DEEP_COPY_TEXTURES          = 1<<5,
    DEEP_COPY_IMAGES            = 1<<6,
    DEEP_COPY_ARRAYS            = 1<<7,
    DEEP_COPY_PRIMITIVES        = 1<<8,
    DEEP_COPY_SHAPES            = 1<<9,
    DEEP_COPY_ALL               = 0x7FFFFFFF
};
下面是我写的三个相关类

Drag.rar

9.89 KB, 下载次数: 165, 下载积分: 威望 1

该用户从未签到

发表于 2009-9-29 22:57:09 | 显示全部楼层
SHALLOW_COPY其实就是把指针传递给新的对象,例如对于两个Geometry对象,如果使用SHALLOW_COPY传递顶点数组,那么两个对象实质上共享了同一个顶点数组;如果是DEEP_COPY_DRAWABLES(或者更省事的,DEEP_COPY_ALL),那么两个对象的顶点数组就是不同的,相当于完整地复制了一份。

不过您的问题和这个估计没有太大关系,抱歉我一时没有时间看您的源代码

该用户从未签到

发表于 2009-10-4 19:46:01 | 显示全部楼层
请问浅拷贝和指针传递的区别
能否把深拷贝和浅拷贝的区别看成是传值和传指的区别?

该用户从未签到

发表于 2009-10-4 20:18:10 | 显示全部楼层
可以说浅拷贝就是把类实例的各个成员指针传递给另一个实例
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表