我想复制一个包含指针的切片,以便新切片中的指针指向新值:假设s
是原始切片,而c
是副本。然后更改*c[i]
应该不会影响*s[i]
。
根据this answer,通常的复制方法不会发生这种情况。
最短的方法是什么?
答案 0 :(得分:1)
使用以下代码复制值:
c := make([]*T, len(s))
for i, p := range s {
if p == nil {
// Skip to next for nil source pointer
continue
}
// Create shallow copy of source element
v := *p
// Assign address of copy to destination.
c[i] = &v
}
此代码创建值的浅表副本。根据应用程序的要求,您可能需要深度复制值,或者如果是结构类型,则要复制一个或多个字段。具体情况取决于实际的T型和应用需求。