当一个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时