سؤال

عندما أقوم بتعيين كائن في 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?)
    }
}
هل كانت مفيدة؟

المحلول

يتم نسخ المرجع فقط، ولا يتم تكرار الكائن نفسه.يمكنك تكرار الكائن بشكل صريح باستخدام .dup رغم ذلك.

نصائح أخرى

الفصول هي أنواع مرجعية، لذلك عندما يكون لديك

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);

وأنصح بالقراءة أيضًا لغة البرمجة D بواسطة أندريه ألكسندريسكو، أو علي شيريلي د دروس لغة البرمجة.بخاصة، هذا الفصل من كتاب علي يناقش الفصول الدراسية، بما في ذلك كيفية تعيينها ونسخها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top