社区
C++ 语言
帖子详情
一个关于拷贝构造函数的问题
RMS_forever
2008-03-01 08:51:22
在深度探索C++对象模型中,有一个地方一直不太明白,作者开始提出问题:如果一个对象满足bitwise copy时,那么编译器会不会优化从而抑制拷贝构造函数的调用?这个问题我一直看的一头雾水,求高人指教,顺便问下什么是bitwise copy?
...全文
201
10
打赏
收藏
一个关于拷贝构造函数的问题
在深度探索C++对象模型中,有一个地方一直不太明白,作者开始提出问题:如果一个对象满足bitwise copy时,那么编译器会不会优化从而抑制拷贝构造函数的调用?这个问题我一直看的一头雾水,求高人指教,顺便问下什么是bitwise copy?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jieao111
2008-03-12
打赏
举报
回复
如果一个对象满足bitwise copy时,那么编译器会不会优化从而抑制拷贝构造函数的调用?
这句话翻译的也真....
Chappell
2008-03-02
打赏
举报
回复
顶5楼
wyk123
2008-03-02
打赏
举报
回复
5楼是正确的
fish6344
2008-03-01
打赏
举报
回复
第一个问题:
如果一个类,仅使用封装和继承(无需运行时多态或virtual继承),且继承体糸中之成员对象或上层subObject无考贝构造函数,例如:
class A
{
long _lAData;//...
//未声明有考贝构造函数!
};
class C{//未声明有考贝构造函数!};
class B : public A
{
long _lBData;
};
上述类声明,按C++标准,就被称为有"bitwise copy"语意。有这样语意的类实例之考贝动作,纯属数据搬移,例如:
B b1;
B b2(b1);//考贝建构b2,其操作就是简单的把b1的数据成员考贝至b2。
反之,如果类有虚函数或是有virtual继承或是其类体糸中其成员对象或subObject声明有考贝构造函数,例如:
class A
{
public:
virtual void show(void){}//有虚函数!
};
class B : public A//B类无"bitwise copy"语意!
{
long _lBData;
};
或是:
class A{};
class C : public virtual A{};//virtual继承!
class B : public virtual A{};//virtual继承!
class D : public C,public B{};//D类无"bitwise copy"语意!
或是:
class A{ public: A(A& _a){}}//有考贝构造!
class B : public A{};B类无"bitwise copy"语意!
上述几种情况都无"bitwise copy"语意, 这需要编译器介入,合成隐晦的考贝构造函数并在其中设立虚函数表指针或关于多重继承下后继基类的偏移量设置以及确保继承体糸中所有其它的考贝构造函数被调用!
关于第二个问题,按候捷的翻译,"bitwise copy"中文意为"位逐次考贝",在《深度探索C++对象模型》并无专门的说明,我理解实质不外就是成员搬移而已。
michney
2008-03-01
打赏
举报
回复
这里指的bitwise copy就是深拷贝,相对于编译器默认生成的浅拷贝(影子拷贝)
意思是:如果类里面的有一个指针成员指向一块内存,浅拷贝的构造函数会简单把指针值赋值给调用者的相应成员
这样两个指针指向了同一块内存,
当第一个对象销毁时,调用析构函数,把自己的内存释放,第二个对象的内存也失效了,指针就变成无效指针了,
这样很危险。
有时候可以阻止编译器自己生产浅拷贝的构造函数,这样就可以避免上述危险。
RMS_forever
2008-03-01
打赏
举报
回复
是不是说位拷贝的话就只是讲内存的内容按位拷贝给另一个对象?那么现在第二个问题解决了,第一个问题呢
visame
2008-03-01
打赏
举报
回复
MARK...
ryfdizuo
2008-03-01
打赏
举报
回复
你说的是位拷贝吧,
http://www.80diy.com/home/20050826/19/4234025.html
RMS_forever
2008-03-01
打赏
举报
回复
自己先顶一下
jieao111
2008-03-01
打赏
举报
回复
dizuo 05 年的贴子都能找出来..
c++的默认
拷贝构造函数
,从深度拷贝和浅拷贝说起
1. c++类的默认
拷贝构造函数
的弊端c++类的中...(2)当类中没有定义
拷贝构造函数
时,编译器会默认提供
一个
拷贝构造函数
,进行成员变量之间的拷贝。(这个拷贝操作是浅拷贝)这里只讲
拷贝构造函数
。在c语言中,int a = 5; /
C++中构造函数,
拷贝构造函数
和赋值函数的区别和实现
拷贝构造函数
是一种特殊的构造函数,用基于同一类的
一个
对象构造和初始化另
一个
对象。当
一个
类的对象向该类的另
一个
对象赋值时,就会用到该类的赋值函数。
拷贝构造函数
是
一个
对象初始化一块内存区域,这块内存就是新...
拷贝构造函数
与赋值构造函数
拷贝构造函数
与赋值构造函数 在C++中,如果要创建
一个
新的类,并用已有的类来给它附初值。就要用到
拷贝构造函数
,
拷贝构造函数
又分为两种。 1.合成的
拷贝构造函数
在你没有定义自己的
拷贝构造函数
而又调用了拷贝构造...
C++
拷贝构造函数
详解
什么是
拷贝构造函数
首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a = 100; int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。 下面看
一个
类对象...
拷贝构造函数
详解
一个
类中可以同时存在这两种类型的
拷贝构造函数
(
一个
的参数是 const 引用,另
一个
的参数是非 const 引用)]。
拷贝构造函数
的作用: 作用是使用类中已经创建好的对象来初始化新创建的对象
拷贝构造函数
的注意要点
C++ 语言
65,186
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章