我们有以下内容:
int* a;
if(!a) //if(a == NULL) also do that
a = new int;
问题是如何用 int^ 做到这一点?
int^ a;
if(?????????????)
a = gcnew int;
PS nullptr 并没有解决所有问题,因为我找到了持有值的对象(nullptr 判断为不相等),然后立即使用该对象导致 System.ObjectDisposedException。
我们有以下内容:
int* a;
if(!a) //if(a == NULL) also do that
a = new int;
问题是如何用 int^ 做到这一点?
int^ a;
if(?????????????)
a = gcnew int;
PS nullptr 并没有解决所有问题,因为我找到了持有值的对象(nullptr 判断为不相等),然后立即使用该对象导致 System.ObjectDisposedException。
使用nullptr
:
int ^a = nullptr;
...
if(a == nullptr)
{
a = gcnew int;
}
...
这应该检查变量,但它的实现真的很奇怪,并且依赖于 .net GC 操作。
try
{
ATestFunctionThatUseVariableForNothing(a);
}
catch (System::ObjectDisposedException^ e)
{
a = nullptr;
}
catch (System::NullReferenceException^ e)
{
a = nullptr;
}
无论如何,应该有另一个更好的解决方案。
如果我们打算像普通 * 指针一样“删除”该指针,那么手动“删除”(设置为 nullptr)是安全的。