创建我的对象的副本
Creating copies of my objects
我是初学者,想知道以下问题
假设我有一个 class foo
并创建了一个对象 foo first
并将一些数据放入其中:
foo first = new foo();
first.data="mydata";
然后我想创建另一个对象 foo second
并使其具有与 first
相同的内容(但内存位置不同)。我可以执行以下操作来实现吗?
foo second = new foo();
second = first;
或者这只是将 first
和 second
设置为相同的内存地址,而我只是有效地获得内存中单个对象的两个句柄?
我读到了有关对象克隆的内容,它似乎太复杂了。我觉得自从我经历了在 foo second = new foo();
中定义一个新的 foo
的麻烦之后,编译器应该意识到 second = first;
打算复制整个东西,而不仅仅是指向第一个。是这样吗?
所以我的问题是:为什么这不是它的工作原理?上面这样设置编译器的逻辑有什么缺陷?
最好的方法是使用复制构造函数。
当您看到有关 clone()
的讨论时,请注意这是非常有争议和令人沮丧的(Google 如果您想知道为什么)。值得注意的例外是:arrays!
拷贝构造函数是这样工作的:
Foo first = new Foo();
first.data="mydata";
Foo second = new Foo(first);
在采用另一个 Foo 的 Foo 构造函数中,只需复制字段,如果它们是复杂对象,也使用它们的复制构造函数。
我是初学者,想知道以下问题
假设我有一个 class foo
并创建了一个对象 foo first
并将一些数据放入其中:
foo first = new foo();
first.data="mydata";
然后我想创建另一个对象 foo second
并使其具有与 first
相同的内容(但内存位置不同)。我可以执行以下操作来实现吗?
foo second = new foo();
second = first;
或者这只是将 first
和 second
设置为相同的内存地址,而我只是有效地获得内存中单个对象的两个句柄?
我读到了有关对象克隆的内容,它似乎太复杂了。我觉得自从我经历了在 foo second = new foo();
中定义一个新的 foo
的麻烦之后,编译器应该意识到 second = first;
打算复制整个东西,而不仅仅是指向第一个。是这样吗?
所以我的问题是:为什么这不是它的工作原理?上面这样设置编译器的逻辑有什么缺陷?
最好的方法是使用复制构造函数。
当您看到有关 clone()
的讨论时,请注意这是非常有争议和令人沮丧的(Google 如果您想知道为什么)。值得注意的例外是:arrays!
拷贝构造函数是这样工作的:
Foo first = new Foo();
first.data="mydata";
Foo second = new Foo(first);
在采用另一个 Foo 的 Foo 构造函数中,只需复制字段,如果它们是复杂对象,也使用它们的复制构造函数。