免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2609 | 回复: 10
打印 上一主题 下一主题

[C++] 对象引用传递的奇怪问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-30 10:51 |只看该作者 |倒序浏览
class Context {
        public:
                inline Context& operator =(const Context& _xctx){mp =_xctx.mp;return *this;}   //注意这里
        private:
                map<string,string>        mp;
};
这个是我定义的要传递的对象。然后我分别有两个接口,分别是A,B,A有子类A'实现,B有子类B'实现,而A,B中都有Context类型的私有成员,也都有setContext方法:
。。。。
void setContext(Context& _xctx){xctx = _xctx;}
private:
   Context xctx;

现在,我这样做:
Context ctx;
A * pa=实例化(A').
pa->setContext(ctx);

在A'的实现中又这样做:
B * pb = 实例化(B');
pb->setContext(xctx);   //这里的xctx是A/A'的私有成员,已经在上面设置过了。
.....

结果在A'中执行到setContext程序就出问题,估计是异常退出。这个是为什么呢?
另外,若我想把 Context作为一个整体的上下文对象,在A',B'执行中对它所有的更改最终都会影响到最外层的那个ctx,那么我是不是就不能在=重载那里用const Context&而应把const去掉?

论坛徽章:
0
2 [报告]
发表于 2008-10-30 13:32 |只看该作者
没人知道吗???似乎设计到深拷贝和浅拷贝的问题……

论坛徽章:
0
3 [报告]
发表于 2008-10-30 13:40 |只看该作者
原帖由 jchc 于 2008-10-30 10:51 发表
class Context {
        public:
                inline Context& operator =(const Context& _xctx){mp =_xctx.mp;return *this;}   //注意这里
        private:
                map        mp;
};
这个是我定义的要传递的对象。然后我分别有两个接口, ...

好乱。。 没看懂。。

论坛徽章:
0
4 [报告]
发表于 2008-10-30 13:44 |只看该作者
本质就是如何实现setContext(Context &ctx),同时方法中对实参的改变要能反应到外部

[ 本帖最后由 jchc 于 2008-10-30 13:46 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2008-10-30 14:07 |只看该作者
乱。。。。
指向指针的指针。。。我不知道你说什么,但感觉你需要的是这个

论坛徽章:
0
6 [报告]
发表于 2008-10-30 14:08 |只看该作者
为何会出现“指向指针的指针”?我只不过需要一个能在各个类间传递并每个类都可改的类实例而已。

论坛徽章:
0
7 [报告]
发表于 2008-10-30 14:10 |只看该作者
绕的好厉害。。。。
那就用智能指针

论坛徽章:
0
8 [报告]
发表于 2008-10-30 14:20 |只看该作者
比如,能举个这样的例子吗?

论坛徽章:
0
9 [报告]
发表于 2008-10-30 14:38 |只看该作者
原帖由 jchc 于 2008-10-30 14:20 发表
比如,能举个这样的例子吗?

其实就是内部增加了一个引用计数而已。。。。。网上一搜一大票

论坛徽章:
0
10 [报告]
发表于 2008-10-30 15:08 |只看该作者
影响不到最外层的那个ctx吧,=重载使 mp变成了一份拷贝。
结果在A'中执行到setContext程序就出问题 ,可能是 xctx(A/A'的私有成员)还有初始化就被你使用了,具体看你代码了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP