现在的位置: 首页 > 综合 > 正文

拷贝构造函数

2018年05月14日 ⁄ 综合 ⁄ 共 510字 ⁄ 字号 评论关闭

用一个类对象初始化该类的另一个对象被称为缺省按成员初始化,在概念上的过程是通过依次拷贝每个非静态数据成员。也被成为浅拷贝。

浅拷贝存在的一个显著问题就是,如果类中包含指针成员,在构造函数中申请了堆、文件等资源,会造成新对象和原来对象的指针指向同一处资源,很容易导致程序崩溃,并且常常出现我们意料之外的计算结果。

解决办法就是使用深拷贝方式,即给类编写拷贝构造函数。拷贝构造函数有一个指向类对象的引用作为形式参数(一般情况下是const引用),并且在函数实现中为新对象申请相同资源。如下所示:

class A
{
public:
    A(){};

    A(int _size) : size(_size)
    {
        data = new int[size];
    }

    A(const A& _A) : size(_A.size)
    {
        data = new int[size];
    }

    ~A()
    {
        delete [] data;
    }

private:
    int* data;
    int size;
};

int _tmain(int argc, _TCHAR* argv[])
{
    A a(5), b = a;
    return 0;
}

抱歉!评论已关闭.