dlang语言最新dmd2103版本以下代码怎么析构函数执行了多次不应该只有一次吗?MyWrite函数我特意指定了ref关键字所以应该不存在拷贝给我解释下原因代码如下import stdstdio;import stdconv;struct MyStruct string name; int age; thisstring name thisname = n
在这个代码中,析构函数会执行两次。
原因在于,MyWrite函数中的参数是一个引用(ref)类型,但是在调用MyWrite函数时,实参m会被隐式地转换为一个临时变量,并将这个临时变量传递给MyWrite函数。当MyWrite函数执行完毕后,这个临时变量会被销毁,从而触发一次析构函数的调用。而在main函数中,m本身也是一个变量,当main函数结束时,m也会被销毁,从而触发第二次析构函数的调用。
如果想要避免这种情况,可以将MyWrite函数的参数改为值传递,这样就不会产生临时变量的拷贝了。
原文地址: https://www.cveoy.top/t/topic/fiud 著作权归作者所有。请勿转载和采集!