源码
// 06CopyConstructor.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "iostream.h"
class Test
{
int i;
int *p;
public:
Test(int ai,int value)
{
i = ai;
p = new int(value);
}
~Test()
{
delete p;
}
Test(const Test& t)
{
this->i = t.i;
this->p = new int(*t.p);
}
};
//思考1. 什么时候需要写出拷贝构造
//思考2. 什么浅拷贝(bitwise Copy),什么是深拷贝(logical copy)?
int main(int argc, char* argv[])
{
Test t1(1,2);
Test t2(t1);//copy constructor
//思考3. 除了上述直接的拷贝构造调用外,什么时候还会调用到拷贝构造函数?
return 0;
}
//思考4. 函数参数传递是,pass by value 和 pass by address(pointer or reference)有何优劣?
思考1: 什么时候需要写出拷贝构造
避免浅拷贝
思考2:什么浅拷贝(bitwise Copy),什么是深拷贝(logical copy)?
浅拷贝:对象A和对象B中指针成员变量指向同一个地址,就叫浅拷贝。
深拷贝:对象A和对象B中指针成员变量指向不同的地址,但是两个地址对应的值是相同的。
思考3:除了上述直接的拷贝构造调用外,什么时候还会调用到拷贝构造函数?
对象在创建时使用其他的对象初始化时以及对象作为函数的参数进行值传递时
思考4:函数参数传递是,pass by value 和 pass by address(pointer or reference)有何优劣?
passby value | passby address |
---|---|
read | read/write |
sizeof(value) | sizeof(int) |
copy-constructor | no mass |