电子商城网站模板,跨境搜是什么平台,优化软件,广州seo优化公司概念#xff1a;拷贝构造函数#xff0c;只有单个形参#xff0c;该形参是对本类类型对象的引用(一般常用const修饰)#xff0c;在用已存在的类类型对象创建新对象时由编译器自动调用。
特征#xff1a; 1. 拷贝构造函数是构造函数的一个重载形式
如#xff1a; 2. 拷贝…概念拷贝构造函数只有单个形参该形参是对本类类型对象的引用(一般常用const修饰)在用已存在的类类型对象创建新对象时由编译器自动调用。
特征 1. 拷贝构造函数是构造函数的一个重载形式
如 2. 拷贝构造函数的参数只有一个且必须是类类型对象的引用使用传值方式编译器直接报错因为会引发无穷递归调用。
造成原因自己画的图 3. 若未显式定义编译器会生成默认的拷贝构造函数。 默认的拷贝构造函数对象按内存存储按字节序完成拷贝这种拷贝叫做浅拷贝或者值拷贝。
我们来看这个代码
class Stack
{
public:Stack(int x4);//Stack(const Stack st);void StackPush(int x);~Stack();
private:int* _a;int _top;int _capacity;
};Stack::Stack(int x)
{_a(int*)malloc(sizeof(int) * x);_top 0;_capacity 4;
}void Stack::StackPush(int x)
{_a[_top] x;
}Stack::~Stack()
{free(_a);_a nullptr;_top 0;_capacity 0;
}int main(){Stack st1;st1.StackPush(1);Stack st2 st1;return 0;}
如果我们没定义这个函数编译器自动生成的会完成浅拷贝。 注意1.他们指针指向的地址都相同这肯定是不行的毕竟析构函数会free两次相同的空间。
2.所以我们就需要自己完成一个深拷贝在这就不去实现了。