0

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

我有一个小问题,

#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;或何时会发生这种情况?或者我应该在哪里打电话?

4

1 回答 1

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;
}
于 2013-11-13T07:53:13.517 回答