拷贝构造函数 首先,我们的目标是拿B初始化A 第一种方法,我们直接给=了 第二种,我们创建一个C,然后把B给扔进去 然后我们再打印C
> class FTestA :public FHello_F{
public:
FTestA();
FTestA(int Ina, int intb, int inc);
~FTestA();
public:
int a;
int b;
int c;
FTest3* T3;
};
FTestA::FTestA() {
a = 11;
b = 13;
c = 9;
T3 = new FTest3();
}FTestA::FTestA(int Ina, int intb, int inc):FHello_F(),a(Ina),b(intb),c(inc)
{
a = Ina;
b = intb;
c = inc;
T3 = new FTest3();
}
FTestA::~FTestA()
{
if (T3) {
delete T3;
T3 = nullptr;
}
}
const FTestA* TsetA = NULL;
void main() {
{
TsetA = new FTestA();
TsetA = new FTestA();
FTestA A;
std::cout << A.a << A.b << A.c << endl;
FTestA B(1, 2, 3);
FTestA C(B);
std::cout << C.a << C.b << C.c << endl;
}
FTestA C(B);//浅拷贝,它将变量作了内存对齐的赋值,它只会对当前的值进行拷贝 深拷贝 深拷贝是什么意思呢? 在我们进行析构的时候,首先我们会调用当前的析构,那么在第一次析构的时候,就已经把当时的指针给清除了,干掉了,那么在拷贝完过后,第二个赋值过去的B,它是还要对这个指针指向的地址再析构一次的,这个时候就会产生崩溃 解决方法 需要注意的是这样的方法要保证,在FTest3中不能有指针,如果有指针的话必须在里面再进行一次深拷贝 需要加*,不能用指针对指针的赋值,因为这样的方法只是指针指向另外一个具体的内存,所以它的赋值方式得加个*,将他们变成具体的对象,然后对象与对象之间浅拷贝把我们的值拷贝在里面
|