<分区>
每一种面向对象的语言(或支持 OOP 的语言),无论是 C++、Java、Python、PHP 都有自己的 clone
函数,它可以返回一个对象的深拷贝或浅拷贝目的。谁能告诉我如何为深拷贝和浅拷贝从头开始创建我自己的clone
函数?显然我不能使用任何语言结构,如 serialize
,更不用说 clone
本身了! PHP
中的示例会很棒,尽管任何其他语言也很好,我需要知道如何去做,仅此而已。
<分区>
每一种面向对象的语言(或支持 OOP 的语言),无论是 C++、Java、Python、PHP 都有自己的 clone
函数,它可以返回一个对象的深拷贝或浅拷贝目的。谁能告诉我如何为深拷贝和浅拷贝从头开始创建我自己的clone
函数?显然我不能使用任何语言结构,如 serialize
,更不用说 clone
本身了! PHP
中的示例会很棒,尽管任何其他语言也很好,我需要知道如何去做,仅此而已。
最佳答案
/* memcpy example */
#include <stdio.h>
#include <string.h>
struct {
char name[40];
int age;
} person, person_copy;
int main ()
{
char myname[] = "Pierre de Fermat";
/* using memcpy to copy string: */
memcpy ( person.name, myname, strlen(myname)+1 );
person.age = 46;
/* using memcpy to copy structure: */
memcpy ( &person_copy, &person, sizeof(person) );
printf ("person_copy: %s, %d \n", person_copy.name, person_copy.age );
return 0;
}
取自http://www.cplusplus.com/reference/clibrary/cstring/memcpy/
我假设您需要复制复杂对象的所有子元素(如图 1 中复制假想对象 A,如果您只需要复制黑色对象但保持不变,则可以使用我上面链接的代码其他作为引用,下面的伪代码适用于你是否也想复制它的所有子项) 上图显示了现实如何以及我们如何看待一个对象
function MyCloneRecursive(object A) : object
{
pointer Cpy;
allocate memory to Cpy;
memcpy(&Cpy,&A,sizeof(A))
//now copy all its child elements
//assuming there is a way to do a foreach that
//for object A there are A.B,A.C and inside A.B there is D
//and childname={"B","C"} and inside of B childname={"D"}
for each childname in object A
{
eval("Cpy." + childname + "=MyCloneRecursive(A." + childname + ")");
}
}
//note this is really bad programming
//clone function is better written in the runtime
//(or its a part of the intepreter not a includable code)
关于php - 如何编写我自己的克隆函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12988022/