执行:通过其指针删除对象

artsafin:

我目前正在学习golang,并具有以下代码。这个想法是让一个对象带有许多指向它的指针,我想使用其中一个指针来修改和删除该对象。

package main

import "fmt"

type obj struct {
    a int
    b string
}

func main() {
    o1 := &obj{1, "hello"}
    o2 := &obj{2, "world"}

    m := map[string]*obj{
        "foo": o1,
        "bar": o2,
    }

    fmt.Printf("1: %t %v\n", o1, o1)
    fmt.Println("2:", m, m["foo"], o1)

    o1.b = "WWWW"
    fmt.Println("3:", m, m["foo"], o1)

    o1 = nil
    fmt.Println("4:", m, m["foo"], o1)
}

http://play.golang.org/p/lqQviVuTQN

输出:

1: &{%!t(int=1) %!t(string=hello)} &{1 hello}
2: map[foo:0x10434120 bar:0x10434130] &{1 hello} &{1 hello}
3: map[foo:0x10434120 bar:0x10434130] &{1 WWWW} &{1 WWWW}
4: map[foo:0x10434120 bar:0x10434130] &{1 WWWW} <nil>

更改对象的内部效果符合我的预期(#3)。但是,当我尝试删除实际对象(#4)时,似乎只是nil指针本身而不接触实际对象。

我想念什么?

Uvelichitel:

Go中的所有分配均按值复制。

 m := map[string]*obj{
        "foo": o1,
        "bar": o2,
    }

是一个赋值,因此foo的值是o1的副本。为了实现您的目标,您需要再一层间接

o1 := &obj{1, "hello"}
o2 := &obj{2, "world"}

    m := map[string]**obj{
        "foo": &o1,
        "bar": &o2,
    }

http://play.golang.org/p/XutneOziaM

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我们可以通过指向其基类之一的指针执行删除对象吗?

通过指向其基础的指针删除POD对象是否安全?

我要删除对象还是仅删除其指针

通过其索引删除数组对象

通过指向其成员之一的指针确定对象指针的最佳方法是什么?

如何通过指向元组的共享指针删除对象

如何通过对象参数从指针向量中删除对象和指针

通过指针传递对象并对其进行修改不会改变对象的状态

删除指针和对象

RValue引用分配给另一个指针后,是否会删除其绑定(非指针)对象?

执行类方法时崩溃但智能指针删除了对象

通过函数内部的指针删除

删除指向对象的指针的指针数组

通过其接口访问对象

指向失去其价值的对象矢量的指针

从指针数组中删除对象

通过其中之一删除对象时,C ++将所有指针设置为null

通过指向基的指针删除对象,而没有虚拟析构函数

QPointer :: clear()会删除其引用的指针,还是“清除此QPointer对象”。还有其他意思吗?

将包含对象的3D数组展平为2D,通过其参数删除重复的对象

python unitests通过其声明的执行顺序

如何通过指针从数组中删除元素

从知道其ID的数组中删除对象

如何基于其ObjectId删除嵌套对象?

Ramda:通过其(数组)属性复制对象

Javascript通过其属性访问主对象

通过其DateTime属性订购对象列表

删除“this”指针后阻止对象使用

如何删除向量中存储的对象的指针?