C++之拷贝构造函数

来源:互联网 发布:linux api 中文手册 编辑:程序博客网 时间:2024/05/11 19:08

通过按值传递的方式传递一个对象时,就创立了一个新对象,函数体内的对象是由函数体外的原来存在的对象传递的。

当编译器需要从现有的对象创建新对象时,可以通过定义自己的函数来实现,因为需要创建新的对象,因此这个函数应该是构造函数,并且传递给这个函数的单一参数必须是创立的对象的源对象,但是该对象不能以按值传递的方式传入构造函数,而是需要以引用的方式来传递,可以使用源对象的引用,这个就是拷贝构造函数

拷贝构造函数的形式是 X(X&),其中,X是类名

使用了拷贝构造函数,就使得编译器在创建新对象时,避免使用位拷贝

默认的拷贝构造函数执行的是位拷贝

仅当准备用按值传递的方式传递类对象时,才需要拷贝构造函数,但是如何避免按值传递呢,那就是将拷贝构造函数声明为私有的,这样就可以防止按值传递。

#include <iostream>using namespace std;class NoCC{    int i;    NoCC(const NoCC&);   //声明public:    NoCC(int ii = 0) : i(ii)    {    }};void f(NoCC){}int main(){    NoCC n;    //f(n);    //error 会调用拷贝构造函数,但是构造函数是私有的,无法调用    //NoCC n2 = n;   //error, 同上    //NoCC n3(n);   //error, 同上}
1 0
原创粉丝点击