c++ 构造器的copy(拷贝), assignment(复制)

来源:互联网 发布:kindle软件下载 编辑:程序博客网 时间:2024/06/06 09:10

1. copy constructor (拷贝构造器)

(1) 拷贝构造器的第一个参数必须是类的引用,其它的参数必须有默认值,如下举例:

class Copy {public:    Copy();// default constructor    Copy(const Copy&);// copy constructor};

(2) 不同于default constructor (默认构造器)在定义其它构造器之后编译系统不自动生成, copy constructor不管有没有定义其它构造器,都会存在自动生成或者手工定义。

类成员通过成员自己定义的copy constructor进行复制,基本类型成员可以直接复制。

(3) 以下几种类型会使用拷贝构造器

使用=定义变量;

向函数传递一个非引用类型;

返回一个非引用类型;

(4) 定义一个带有拷贝构造函数的类

class HasPtr {public:    HasPtr(const std::string &s = std::string()) :        ps(new std::string(s)), i(0) { }    HasPtr(const HasPtr &hp) : ps(new std::string(*hp.ps)), i(hp.i) { }private:    std::string *ps;    int i;};

(5) copy assigned operator (拷贝赋值运算符),给上面的类加一个拷贝赋值运算符

class HasPtr {public:    HasPtr(const std::string &s = std::string()) :        ps(new std::string(s)), i(0) { }    HasPtr(const HasPtr &hp) : ps(new std::string(*hp.ps)), i(hp.i) { }    HasPtr& operator=(const HasPtr &rhs_hp) {        if (this != &rhs_hp) {    std::string *temp_ps = new std::string(*rhs_hp.ps);    delete ps;            ps = temp_ps;     i = rhs_hp.i;}return *this;    }private:    std::string *ps;    int i;};


0 0
原创粉丝点击