d参数到参数导致错误赋值

阅读 115

2022-08-20


​​原文​​

@safe:
int global;

auto f(int* x, int* y)
{//xy推导为域.
x = y;
global++; // 确保不是从pure中推导为域
}

void g(scope int* z)
{
f(z, z); // 通过
}

按​​scope​​​显式标记​​x和y​​​时,会出错:把​​x​​​域赋值给生命期更长的​​y​​​变量.
显然,推导​​​域参数​​​并不关心​​参数​​​的相对生命期,这在具有​​析构函数​​​时是​​有问题​​的.


精彩评论(0)

0 0 举报