复制构造函数中的指针赋值

时间:2017-07-09 10:30:25

标签: c++ class c++11 memory-management

我使用了由Avinash C. KAK撰写的使用对象编程这本书,并且在第452页中,它说构造了一个复制构造函数方法

class X{
int * ptr;
int size;
public:
X(const X & xobj)
{
    size = xobj.size;
    ptr = new int [size];
    for(int i = 0; i < size; i++)
    {
        ptr[i] = xobj.ptr[i];
    }   
}
}

然后用作

X x1;
X x2 = x1;

但我不明白的是,首先它为x2.ptr分配内存,然后将x1.ptr的内存地址分配给x2.ptr,这与使用复制构造方法和新分配的目的相矛盾记忆现在根本没有被使用,所以我错过了什么?

1 个答案:

答案 0 :(得分:1)

如果你有一个指向新分配的数组的指针,如:

ptr = new int[size];

然后您可以使用与数组相同的方式对其进行索引:

ptr[1] = 3; // equivalent to: *(ptr + 1) = 3

因此,它是一个复制构造函数,它将xobj.ptr指向的内存内容复制到ptr指向的新分配的内存中。