拷贝构造函数
拷贝构造函数与构造函数区别:
拷贝构造函数是用对象对对象进行初始化,而构造函数则是用数值对对象进行初始化。
浅拷贝:
将原对象或原数组的引用直接赋值给新对象,新数组。
新对象/数组只是原对象的引用。
class test
{
private:
int data[5];
public:
test() //构造函数
{
for (int i = 0; i < 5; i++)
{
data[i] = i + 10;
}
}
test(const test& t) //拷贝构造函数
{
for (int i = 0; i < 5; i++)
{
data[i] = t.data[i];
}
}
}
深拷贝:
创建一个新的对象和数组,将原对象的各项属性一一拷贝过来,是新的值,而不是对原来的引用。
template <class Type>
class SeqStack
{
private:
Type * data;
int maxsize;
int pos;
public:
SeqStack(int sz = 10):data(NULL),maxsize(10),pos(-1)
{
data = (Type *)malloc(sizeof(SeqStack) * maxsize);
// data = new SeqStack[maxsize];
}
SeqStack(const SeqStack& st):data(NULL),maxsize(st.maxsize),pos(st.pos) //拷贝构造函数
{
if (st.data != NULL)
{
data = (Type*)malloc(sizeof(SeqStack) * maxsize);
if (data != NULL) exit(EXIT_FAILURE);
for (int i = 0; i < st.pos; i++)
{
new(&data[i]) Type(st.data[i]);
}
}
}
};
深拷贝与浅拷贝的区别:
在对空间进行操作时,如果用浅拷贝,将导致同一空间可以被两个对象进行操作,也就是在调用析构函数时,同一空间将被释放两次,这是不正确的。