-1

我们有以下内容:

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。

4

2 回答 2

4

使用nullptr

int ^a = nullptr;
...
if(a == nullptr)
{
   a = gcnew int;
}
...
于 2012-06-06T13:05:47.130 回答
0

这应该检查变量,但它的实现真的很奇怪,并且依赖于 .net GC 操作。

    try
            {
                ATestFunctionThatUseVariableForNothing(a);
            }
            catch (System::ObjectDisposedException^ e)
            {
                a = nullptr;
            }
            catch (System::NullReferenceException^ e)
            {
                a = nullptr;
            }

无论如何,应该有另一个更好的解决方案。

如果我们打算像普通 * 指针一样“删除”该指针,那么手动“删除”(设置为 nullptr)是安全的。

于 2012-06-07T02:03:23.790 回答