社区
C++ 语言
帖子详情
一个关于拷贝构造函数的问题
RMS_forever
2008-03-01 08:51:22
在深度探索C++对象模型中,有一个地方一直不太明白,作者开始提出问题:如果一个对象满足bitwise copy时,那么编译器会不会优化从而抑制拷贝构造函数的调用?这个问题我一直看的一头雾水,求高人指教,顺便问下什么是bitwise copy?
...全文
249
10
打赏
收藏
一个关于拷贝构造函数的问题
在深度探索C++对象模型中,有一个地方一直不太明白,作者开始提出问题:如果一个对象满足bitwise copy时,那么编译器会不会优化从而抑制拷贝构造函数的调用?这个问题我一直看的一头雾水,求高人指教,顺便问下什么是bitwise copy?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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++
拷贝构造函数
问题
本文探讨了在C++中,对象初始化过程中编译器的行为。通过两个测试例子展示了编译器在不同情况下是否会调用
拷贝构造函数
。测试一表明,当使用CTestAoa=CTestA()时,构造函数被调用,但
拷贝构造函数
和赋值运算符未被调用。然而,在测试二中,由于
拷贝构造函数
被明确删除,编译器尝试调用导致错误,揭示了编译时对于
拷贝构造函数
的依赖。
没技术含量但需要注意的
一个
小
问题
,仍然是
拷贝构造函数
问题
!
本文探讨了C++中浅拷贝带来的
问题
,并通过实例展示了如何实现深拷贝来解决这一
问题
。文章重点讲解了自定义
拷贝构造函数
的方法。
拷贝构造函数
的
一个
对象访问私有成员的
问题
本文探讨了C++中
拷贝构造函数
的实现细节,特别是如何正确地处理类内部的私有成员变量。通过具体实例说明了在
拷贝构造函数
中如何安全地访问并使用这些私有成员。
C++
拷贝构造函数
与运算符重载应该注意的
一个
问题
?
本文探讨了C++中
拷贝构造函数
和运算符重载时应避免的错误,如自赋值
问题
和内存管理错误。强调了在拷贝构造和运算符重载中检查this指针与other指针是否相同的重要性,以及在修改数据前应先复制旧数据,再添加新数据,最后删除旧数据的正确做法。
C++ 语言
65,211
社区成员
250,516
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章