如果一个类没有显示定义copy constructor时,什么时候编译器会合成一个copy constructor???

本文探讨了在C++中,当类没有显式展示位操作语义时,编译器如何自动合成拷贝构造函数。通过分析不同类的声明和成员属性,解释了何时类不展现位操作语义,并提供了合成拷贝构造函数的伪代码。

当一个class没有展现出"bitwise copy semantics"时,

如果class没有copy constructor时,编译器就是自动合成一个copy constructor

(1)//以下声明展示了bitwise copy semantics

class Word

{

public:

  Word(const char*);

  ~Word(){delete []str;}

private:

  char * str;

  int len;

};

 

(2)//以下声明未展示出bitwise copy semantics

class Word

{

public:

   Word(const String&);

   ~Word();

private:

    int cnt;

    String str;

 

};

 

class String

{

public:

    String(const char*);

    String(const String&);

    ~String();

};

 

合成的Word的copy constructor伪代码如下:

inline Word::Word(const Word& wd)

{

 str.String::String(wd.str);

 cnt = wd.cnt;

}

什么时候一个class不展现出"bitwise copy semantics"
1. 当class内含一个member object而后者的class 声明有一个copy constructor时
2. 当class继承自一个base class 而后者存在有一个copy constructor时
3. 当class 声明了一个或多个virtual functions
4. 当class派生自一个继承串连,其中一个或多个virtural base classes时

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值