【发布时间】:2017-07-09 10:30:25
【问题描述】:
我正在使用 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,这和有拷贝构造方法的目的和新分配的有矛盾内存现在根本没有被使用,所以我错过了什么?
【问题讨论】:
-
为什么觉得内存没有用?从
ptr到ptr没有赋值,只有内容被复制 -
但是我们不应该使用 as ´´*obj.ptr[i]´ 吗?
-
不,不应该。这是一个正常的数组访问。
-
@SamiKuhmonen 所以这样做的方式是正式的和正确的方式吗?
-
是的。它分配一个新数组并将现有对象的内容复制到其中,因此现在有两个相同的对象彼此污水。
标签: c++ class c++11 memory-management