关于*outReq = *req 这个是浅拷贝吗?
来源:4-4 开发一个浏览器代理2

qq_何阳光_0
2020-05-17
*outReq = *req 这个是浅拷贝吗?是不是写错了呀。req这个变量已经是*http.Request的指针类型了,outReq使用new方法创建了一个对象也是指针类型了。然后又这样*outReq=*req赋值,肯定是深拷贝呀。。。
下面是我写的代码,并附上了结果您看一下,如果是写错了请更改过来。如果我错了,请您告诉我,谢谢。
写回答
2回答
-
package main import "fmt" type SubObj struct { Name string } type ParentObj struct { Sub *SubObj PName string } func main() { pObj := &ParentObj{ PName: "ParmentObj", Sub: &SubObj{Name: "SubObj"}, } newPObj := &ParentObj{} *newPObj = *pObj pObj.Sub.Name = "ChangeSubObj" fmt.Printf("newPObj: %#v\n", newPObj.Sub.Name) fmt.Printf("pObj: %#v\n", pObj.Sub.Name) //newPObj: "ChangeSubObj" //pObj: "ChangeSubObj" }
是浅拷贝哦,
浅拷贝对于值类型的话是完全拷贝一份,而对于引用类型是拷贝其地址。如上面的例子所示,虽然我们对newPObj执行了拷贝,但是其子属性Sub是指针。我们再更改原结构体指针内容时,新结构也会有影响。
042020-11-28 -
qq_何阳光_0
提问者
2020-05-18
我把图片放在了这里。
00
相似问题