2.2 2.3 c# 接口 AIDIRunner 错误 (LabelIO 解析失败)

首页 论坛 AIDI-二次开发 AIDI-二次开发【2.0系列】 2.2 2.3 c# 接口 AIDIRunner 错误 (LabelIO 解析失败)

正在查看 1 个帖子:1-1 (共 1 个帖子)
  • 作者
    帖子
  • #269
    haibo.zhang
    参与者

     

     

     

    static LabelIO infer_d(Client client, StreamWriter sw)
    {

    // 错误 :1、 LabelIO results = client.wait_get_result(ref id)[0]
    //
    2 、LabelIO results = new LabelIO(client.wait_get_result(ref id)[0]);

    }

    解释:

    wait_get_result()   返回值是 BatchLabelIO 类型的对象

    所以如果使用 1 调用方法,返回值不会拥有那块内存所有权,且那块内存属于 BatchLabelIO

    的临时对象

    而 BatchLabelIO 的生存期(或者说上下文)是在这个函数内, 当这个函数结束后, 这个

    BatchLabelIO 临时对象 ,最后一次引用也结束了 ,垃圾回收器会在某个非指定的时间销毁其实例

    (引用 a)

    此时,函数返回值就变成野指针了

     

    背景知识:

    a、无需销毁此前创建的类型实例。 引用和值类型的实例将自动销毁。 包含值类型的上下文销毁后,值类型的实例随之销毁。 在引用类型的最后一次引用被删除后,垃圾回收器会在某个非指定的时间销毁其实例。

    b、用户定义类型不能重载赋值运算符。 但是,用户定义类型可以定义到其他类型的隐式转换。 这样,可以将用户定义类型的值分配给其他类型的变量、属性或索引器元素。 有关详细信息,请参阅用户定义转换运算符。

    c、用户定义类型不能显式重载复合赋值运算符。 但是,如果用户定义类型重载了二元运算符 op,则 op= 运算符(如果存在)也将被隐式重载。

    赋值运算符 – C# 参考 | Microsoft Learn

    new 运算符 – C# 参考 | Microsoft Learn

     

    • 该话题由haibo.zhang 于 2年、 6月前 修正。
正在查看 1 个帖子:1-1 (共 1 个帖子)
  • 哎呀,回复话题必需登录。