Bite Copy Semantics (位逐次拷贝)
1.Default Constructor
将class 对象中的值原原本本的copy到另一个对象中。
产生的问题:
class A{
public:
/*
//在bitwise copy semantics时注释,表示没有构造函数
A()
{
m_pData = new int;
}
//这里的初始化顺序是先初始化m_data,再初始化m_index。按照变量声明的顺序。
A(int data,int index):m_index(index),m_data(data)
{
}
*/
~A()
{
delete m_pData;
}
private:
int m_data;
int m_index;
int * m_pData;
};
这里当:
int main()
{
` A a1;
A a2 = a1;
return 0;
}
会报错,原因是a2 - a1;进行bitwise copy semantics;在执行析构函数的时候m_pData被delete两次。
什么时候不进行bitwise copy semantics:
1)当A类有成员变量是B类对象,并且B类含有默认构造函数
2)类的基类有默认构造函数时
3)类中存在虚函数
4)虚基类 virtual public Base(虚基类作用是去掉多继承中重名的变量和重名的方法名称)
5)类没有copy constructor
2.Copy Constructor
什么时候不进行bitwise copy semantics:
1)class中含有的成员对象B b; 类B中声明有Copy constructor
2)class继承的基类有Copy constructor
3)class有virtual function时
4)class继承的基类有virtual function
如果class出现了bitwise copy semantics时,就不会为我们产生Default/Copy Constructor
所以,对象传递一般用 指针、引用或重写copy constructor。而不是浅拷贝。