复制构造函数说明

时间:2013-11-13 07:41:48

标签: c++

我理解当我要将现有对象初始化为新创建的对象时,称为复制构造函数。

我有一个小查询,

#include<iostream.h>

using namespace std;

class Base
{
    int* m;
public:
    Base(int p)
    {
        m = new int(p);
    }
    Base(const Base& obj)
    {
        m = new int(*obj.m);
    }
    Base operator=(const Base& obj1)
    {
        m = new int(*obj1.m);
    }
    ~Base()
    {
        delete m;
    }
};

int main()
{

    Base b(10);
    Base a = b;
    b = a;

    return 0;
}

为什么我应该Base a = b;或何时会出现这种情况?或者我应该在哪里打电话?

1 个答案:

答案 0 :(得分:0)

Base a = b;  // equal to Base a(b);

它与复制构造函数一样,实际上它是复制初始化。这与作为作业的a = b;不同。在构造函数中,正在创建对象,您只需要分配资源,但在赋值中已经存在一个对象,因此如果要分配新资源,则应释放以前的资源:

Base operator=(const Base& obj1)
{
    m = new int(*obj1.m);
}

此代码由于取消释放之前的m而导致内存泄漏。而且它应该返回一些东西。由于您的代码只能在内存中的一个单元格中运行,因此此代码应如下所示:

Base &operator=(const Base& obj1)
{
    *m = *obj1.m;
    return *this;
}