Object 如何从内部销毁D对象

Object 如何从内部销毁D对象,object,d,destroy,Object,D,Destroy,如果我有一个D物体,我怎么能从内部摧毁它呢?(让它自毁) 让你想销毁的东西等于“NULL” 比如说 class A { public void destroy() { state = NULL; } } 不幸的是,对象无法知道对它的任何外部引用 为了解决这个问题,您可以添加一个方法来跟踪存储指向对象指针的字段。然而,这是笨拙的,并且会导致尝试修改外部数据 您可以向对象添加一组,使其能够告诉所有将要听的人它希望被销毁。然而,这迫使外部代码为它们希望使用的对象的每个

如果我有一个D物体,我怎么能从内部摧毁它呢?(让它自毁)


让你想销毁的东西等于“NULL” 比如说

class A {
    public void destroy() {
        state = NULL;
    }
}

不幸的是,对象无法知道对它的任何外部引用

为了解决这个问题,您可以添加一个方法来跟踪存储指向对象指针的字段。然而,这是笨拙的,并且会导致尝试修改外部数据

您可以向对象添加一组,使其能够告诉所有将要听的人它希望被销毁。然而,这迫使外部代码为它们希望使用的对象的每个引用添加额外的方法


希望有一种方法可以修改您的算法,使其不依赖于在显式时间收集垃圾,也不依赖于生成悬空指针,这是D要消除的问题之一。

不,在D中没有办法做到这一点,这是有充分理由的。 解释如何在C++中完成,并解释<代码>的威胁>删除此< <代码>…
嗯,这是一个好主意,D不允许这样做,因为这似乎是合乎逻辑的——对象不应该控制自己的生命周期,程序应该这样做。程序给了对象“生命”,程序也应该“夺走它们的生命”(本例中是垃圾收集)。

这种语言中不是有这样的说法吗?有,但如何销毁它呢?据我所知,“删除”不会调用析构函数。可能是@Macmade No的重复,因为我已经知道delete不会删除它。@JeroenBollen你读过完整的答案了吗?关于
GC.free(obj)
?的部分只会将指向它的指针设置为null,如果我有其他指向它的指针呢?然后会得到比未删除更糟糕的悬空指针state@ratchetfreak那肯定会把事情搞砸的。它将指向一个非对象或只是指向尚未收集的对象。@JeroenBollen我的意思是,如果你在某个对象指向它时销毁/释放某个对象,那么就会有一个悬空pointer@ratchetfreak我知道。如果我把它设为null,那么只有一个指针设为null,不是吗?我不明白这里有什么吗?如果我对同一对象有多个引用怎么办?
class A {
    public void destroy() {
        state = NULL;
    }
}