C++代码:
person* NewPerson(void)
{
person p;
/* ... */
return &p; //return pointer to person.
}
C# code:
person NewPerson()
{
return new person(); //return reference to person.
}
如果我理解正确的话,C++ 中的例子就不行,因为p
将要
超出范围,函数将返回一个野指针(悬空指针)。
C# 中的示例没问题,因为只要存在对匿名新人的引用,它就会保留在作用域内。 (调用函数得到一个。)
我做对了吗?
C++ 中的示例不行,因为“p”将超出范围,并且该函数将返回无效指针。
正确的。
C# 中的示例没问题,因为只要有任何引用,匿名“new Person”就会保留在作用域内。
这或多或少是正确的,但你的术语不太正确。Scope在 C# 中是文本区域,其中不合格名称可以使用。这里的对象没有名称。Lifetime is 保证存储位置有效的运行时间段。范围和生命周期是相关的;当控制离开与某个作用域关联的代码时,通常允许在该作用域内声明的局部变量的生命周期结束。 (在某些情况下,当地人的寿命比控制范围内的时间长或短。)
另外,请注意,它不是any对保持其活动状态的 Person 对象的引用。参考必须是rooted。您可以有两个相互引用但无法访问的 Person 对象;事实上,每个人都有一个参考并不能让他们保持活力;参考文献之一必须是 root 的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)