C++中Copy Constructor的构造操作
来源:互联网 发布:电纸书阅读器软件 编辑:程序博客网 时间:2024/03/28 18:52
1.会以一个object的内容作为另一个class object的初值的三种基本情况
class X{...};
X x;
第一种: X xx = x;
第二种:值传递给函数 void test(X x);
第三种:作为函数返回类型 X test();
2.什么是Default Memberwise Intialization
当class object以相同class的另一个object作为初值时,其内部是以Default Memberwise Intialization(默认成员逐次初始化)的形式完成的:其实质就是把每一个内建的或者派生的data member的值,从某个object拷贝到另一个object上。遇到member class object,以递归的方式继续施行memberwise initalization
3.如何实现上述操作
被copy constructor实现的
4.copy construtor如何实现
和默认构造一样,c++标准中说,如何class没有声明一个copy construtor,就会有隐式的声明或隐式定义。而c++标准把拷贝构造又分为trival 和nontrival。只有nontrival的实例才会被合成到程序中。决定一个拷贝构造是否为trivial的标准中在于class是否展现bitwise copy semantics(位依次拷贝)。展现位依次拷贝的就不需要合成默认拷贝构造了
5.class不展现出“bitwise copy semantics”的情况(也就是在没有显式定义拷贝构造的情况下,编译器为我们合成默认拷贝构造的情况)
1.当class内含一个member object而后者的class声明有一个copy constructor(此拷贝构造合成的也算)时
2.当class继承自一个base class而后者存在一个copy constructor
3. 当class声明了一个或多个虚函数时
4.当class派生自一个继承串链,其中有一个或者多个virtual base classes时。
(ps :上述四种情况和和合成默认构造函数条件相似,可以参考我的另一篇博文http://write.blog.csdn.net/postlist)
5.应该注意的几点(实例说明)
当编译器导入一个vptr到class中,该class就不再展现bitwise semantics了。
class ZooAnimal
{
ZooAnimal();
virtual ~ZooAnimal();
virtual void animate();
virtual void draw();
//...
private:
//ZooAnimal的animate()和draw()
//所需要的数据
}
class Bear : public ZooAnimal
{
public:
Bear();
void animate();
void draw();
virtual void dance();
//...
private:
//所需要的数据
}
Bear yogi; yogi会被Bear类默认构造函数初始化,其vptr会被设置为指向Bear class的virtual table
Bear winnie = yogi;
ZooAnimal franny = yogi; //会发生切割行为franny的vptr会指向ZooAnimal class的虚表
- C++中Copy Constructor的构造操作
- 2.2 Copy constructor的构造操作
- [C++]异常处理中的拷贝构造操作(copy constructor)
- Copy Constructor 的建构操作
- 深度搜索C++对象模型2.2 构造函数语义学-Copy Constructor的构造操作
- 默认的拷贝构造函数copy constructor
- Inside the C++ Model第二讲之 Copy Constructor的构造操作
- 读书笔记《Inside the C++ Object Model》:Copy Constructor的构造操作
- 构造函数语义学之Copy Constructor构建操作(1)
- 构造函数语义学之Copy Constructor构建操作(2)
- 2.2copy constructor的构建操作
- Copy Constructor 建构操作
- C++中直接拒绝编译器自动生成copy constructor和copy operator=操作(6)---《Effective C++》
- 【C++】Copy Constructor
- 复制构造函数(copy constructor)
- Copy constructor拷贝构造函数
- 拷贝构造函数 (Copy constructor)
- 构造函数语义学----copy constructor
- Centos7安装32位库用来安装32位软件程序
- GUI程序设计原理
- jquery的2.0.3版本源码系列(6)-2880-3042行,回调对象,对函数的统一管理
- AIDL跨进程通信
- macOS 自带vim升级
- C++中Copy Constructor的构造操作
- Struts之Action对象
- <c语言经典100例>c1 数的组合
- 九度[1011]-最大连续子序列
- <c语言经典100例>c2 利润分层
- 58笔试-2018秋招
- Ubuntu 下安装filezilla(FTP工具)
- [LeetCode] 22. Generate Parentheses
- talib安装