bitwise && memberwise ,求解释和代码示例

DontKissBossAss 2010-11-05 11:19:49
memberwise 对每一个member施以
bitwise 对每一bit施以。。。

谁帮助解释下 OOP中这个啥意思,怎么区分,最好有点简单代码帮助。。在inside the C++Object model 关于这两页我看了半天也没看明白。求解释。

...全文
235 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
DontKissBossAss 2010-11-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 dontkissbossass 的回复:]
可不可以这样理解,

如果class X没有 复制构造函数,如果在不是必须的情况下(类内没有object,没有继承,没有virtual),编译器是按照bitwise copy的。


对么
[/Quote]


我这么理解是对的,带着这个理解,再次看下不糊涂的那章节,什么都讲通了。

结贴了。
liutengfeigo 2010-11-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 gules 的回复:]

一般来说,在对象间进行复制或赋值时,呈现两种情况(编译器层面):
1、可把对象当作一个“内存平面”,把另一个对象所占内存内的内容逐位复制过来而不会产生问题(即bitwise语义);
2、不可按上述方式处理,例如对象内含有base、class member、vptr、virtual base(且需要重新设置某些内容,如vtbl等),这时只能按其成员逐一拷贝,然后再设置对象内的特殊值等等(即me……
[/Quote]
++
DontKissBossAss 2010-11-06
  • 打赏
  • 举报
回复
可不可以这样理解,

如果class X没有 复制构造函数,如果在不是必须的情况下(类内没有object,没有继承,没有virtual),编译器是按照bitwise copy的。


对么
pengzhixi 2010-11-05
  • 打赏
  • 举报
回复
实际是深拷贝与浅拷贝的问题
healer_kx 2010-11-05
  • 打赏
  • 举报
回复
这是个C++的概念,Java也有类似的事情。就是copy构造,赋值重载时候的问题。

class A
{
int m; //成员m
}

A a1;
A a2 = a1;
当用a1构造a2的时候,是把m当做4个字节来copy过去呢? 还是把m当成一个完整的成员赋值过去呢?
我这个是表面意思的解释,帮你理解。

实际遇到的问题是深拷贝和浅拷贝的问题。
hslinux 2010-11-05
  • 打赏
  • 举报
回复
memberwise: 成员逐一;
memberwise copy: 成员逐一复制;按成员拷贝;数据成员执行成员拷贝
memberwise assignment: 成员式赋值
bitwise :按位操作。
gules 2010-11-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dontkissbossass 的回复:]
引用 4 楼 gules 的回复:
一般来说,在对象间进行复制或赋值时,呈现两种情况(编译器层面):
1、可把对象当作一个“内存平面”,把另一个对象所占内存内的内容逐位复制过来而不会产生问题(即bitwise语义);
2、不可按上述方式处理,例如对象内含有base、class member、vptr、virtual base(且需要重新设置某些内容,如vtbl等),这时只能按其成员逐一拷贝,……
[/Quote]

呵呵,还是清楚的嘛!
对,是memberwise的。
bitwise的例子见于大部分POD类型的类。
DontKissBossAss 2010-11-05
  • 打赏
  • 举报
回复
Inside The C++ Object model 讲的好清楚,但是就是这块的概念叫我混淆了。。。

DontKissBossAss 2010-11-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 gules 的回复:]
一般来说,在对象间进行复制或赋值时,呈现两种情况(编译器层面):
1、可把对象当作一个“内存平面”,把另一个对象所占内存内的内容逐位复制过来而不会产生问题(即bitwise语义);
2、不可按上述方式处理,例如对象内含有base、class member、vptr、virtual base(且需要重新设置某些内容,如vtbl等),这时只能按其成员逐一拷贝,然后再设置对象内的特殊值等等(即mem……
[/Quote]


麻烦问下,如下代码中 class word 属于 member 还是bit行为
class word
{
public:
//No explict copy constructor
public:
int nNum;
string str;
};


如果是 member,请举个bit的代码,谢谢了
Erorr 2010-11-05
  • 打赏
  • 举报
回复
这个问题要考虑的是继承的情况,例如
class A
class B: public A
如果都是A的对象之间拷贝构造,那用bitwise是没有问题的
如果发生的是A和B之间进行拷贝构造,两个对象的大小都不一样,就需要单独找出每一个member来拷贝,这就是memberwise
libinfei8848 2010-11-05
  • 打赏
  • 举报
回复
一般编译器默认拷贝构造函数可能运用的bitwise
这就是提倡较复杂的类,需要自己实现拷贝构造,或者禁用
gules 2010-11-05
  • 打赏
  • 举报
回复
一般来说,在对象间进行复制或赋值时,呈现两种情况(编译器层面):
1、可把对象当作一个“内存平面”,把另一个对象所占内存内的内容逐位复制过来而不会产生问题(即bitwise语义);
2、不可按上述方式处理,例如对象内含有base、class member、vptr、virtual base(且需要重新设置某些内容,如vtbl等),这时只能按其成员逐一拷贝,然后再设置对象内的特殊值等等(即membersise语义)。

在程序员层面上,即为楼上所述“深浅复制之别”。

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧