c++浅层复制构造函数运行原理实例讲解

c++浅层复制构造函数运行原理实例讲解,编译器提供了默认构造函数和析构函数,同样也提供了复制构造函数,编译器提供的默认复制构造函数只是把传递进来的对象的每个成员变量复制到新对象成员变量中去。然后两个对象中的变量均指向存放类成员变量的那块内存区域,假如该变量不是指针变量一般不会立即报错,假如该变量时指针变量,对指针变量复制以后,两个指针会同时指向同一个区域。

现在对象a有一个指针变量x,它指向堆中存放6的那块区域,我们将对象a复制到对象b,如:A b=(a);由于要复制复制对象,因此会自动调用默认构造函数,调用的过程为:

#include <iostream>
using namespace std;

class A{
public:
A(){x=new int; *x=5;}
~A(){delete x;x=NULL;}
A(const A&a){
cout<<”复制构造函数执行…\n”;
x=a.x;
}
void print()const{cout<<*x<<endl;}
void set(int i){*x=i;}
private:
int *x;
};

int main(){
A*a=new A();
cout<<”a:”;
a->print();
cout<<endl;
A b=(*a);
b.print();//输出与上同样的数,说明两个指针指向同一个内存空间
//delete b;这句程序是错的
delete a;//这句可以编译,但运行时会导致程序崩溃,原因是a所指向的内存已经被析构掉了
return 0;

}

浅层复制构造函数

c++浅层复制构造函数运行原理实例讲解

c++浅层复制构造函数

c++浅层复制构造函数

本文链接地址: c++浅层复制构造函数运行原理实例讲解