从结构数组返回时为什么不调用this(this)?

时间:2012-02-18 22:06:53

标签: d

import std.stdio;

struct S
{
    string m_str = "defaultString";

    this(this)
    {
        writeln("In this(this)");
    }

    ~this()
    {
        writeln("In ~this():"~m_str);
    }

}

struct Holder
{
    S[] m_arr;
    S m_s;

    this(S[] arr)
    {
        m_arr = arr;
        m_s.m_str="H.m_s";
    }

    S getSMem()
    {
        return m_s;
    }

    S getSVec()
    {
        return m_arr[0];
    }

    S getSLocal()
    {
        S local = S("localString");
        return local;
    }
}

void main()
{
    Holder h = Holder(new S[1]);

    S s1 =  h.getSMem();
    S s2 =  h.getSVec();
    S s3 =  h.getSLocal();
}

上面的D2.058给出了:

  

在此(本)

     

在〜this()中:localString

     

在〜this()中:defaultString

     

在〜this()中:H.m_s

     

在〜this()中:H.m_s

上面只生成了一个this(this)(来自getSMem()调用)。 getSLocal()调用可以只移动结构。但是,为什么getSVec()不会导致this(this)?我注意到这是std.container.Array中保存的引用计数结构的上下文,与this()相比,对此(this)的调用太少了。

1 个答案:

答案 0 :(得分:2)

getSVec的情况下,它看起来像一个可能与this one相关的错误,尽管情况并不完全相同。您应该报告您的具体示例,因为它可能不是完全相同的错误。

但是,如您所说,在getSLocal的情况下,移动了局部变量,因此不会进行复制,也不需要进行postblit调用。只是getSVec这是错误的。