【问题标题】:Will objects be copied in assignment in D?对象会在 D 中的赋值中被复制吗?
【发布时间】:2013-11-29 21:19:37
【问题描述】:

当我在D中分配一个对象时,它会被复制吗?

void main() {
    auto test = new Test(new Object());
    tset.obj;
}

class Test {
    public Object obj;

    public this(Object ref origObj) {
        obj = origObj; // Will this copy origObj into obj, or will origObj and obj point to the same data? (Is this a valid way to pass ownership without copying the object?)
    }
}

【问题讨论】:

    标签: reference d ownership copy-assignment


    【解决方案1】:

    类是引用类型,所以当你有

    Object o;
    

    o 是对Object 的引用,而不是实际的Object,因此复制它只是复制引用。就像指针一样。

    auto a = new int;
    *a = 5;
    
    auto b = a;
    assert(a is b);
    assert(*a == *b);
    
    *b = 5;
    assert(*a == 5);
    

    我建议阅读 Andrei Alexandrescu 的 The D Programming Language 或 Ali Çehreli 的 D Programming Language Tutorial。 Ali 书中的this chapter 特别讨论了类,包括如何分配和复制它们。

    【讨论】:

      【解决方案2】:

      只复制引用,不复制对象本身。不过,您可以使用 .dup 显式复制该对象。

      【讨论】:

      • 您必须首先为您尝试dup 的任何类声明dup 方法,就像您必须在Java 或C# 中定义clone 方法一样。没有内置方法可以复制/克隆/复制 D 中的类。
      猜你喜欢
      • 2011-01-27
      • 2018-10-12
      • 1970-01-01
      • 1970-01-01
      • 2015-09-26
      • 2013-11-24
      • 2013-12-07
      • 1970-01-01
      相关资源
      最近更新 更多