在C ++ / CLI中传递句柄的引用

时间:2009-09-29 14:04:02

标签: reference c++-cli handle

我想删除一个带有函数的2级派生类,并将其句柄设置为null。 一段代码将有所帮助:

ref class bob
{
};

ref class bill : public bob
{
};

ref class jack : public bill
{
};

void DeleteX( bob ^% x )
{
  if( x != nullptr )
  {
    delete x;
    x = nullptr;
  }
}

[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
  bill^ one = gcnew jack();
  DeleteX(one);
  System::Diagnostics::Trace::Assert(one == nullptr); //Failed
  return 0;
}

如果我对我的声明和我的函数参数使用相同的类型,它可以工作。 但是我想使用中间类型作为声明,使用上部类型作为函数参数。 我该怎么办呢?

这是我最终使用的解决方案:

template<class T>
void DeleteX( T ^% x )
{
  if( x != nullptr )
  {
    delete x;
    x = nullptr;
  }
}

1 个答案:

答案 0 :(得分:1)

它对我有用......

ref class bob
{
};

ref class bill : public bob
{
};

void DeleteX( bob ^% x )
{
  if( x != nullptr )
  {
    delete x;
    x = nullptr;
  }
}

[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
    bob^ one = gcnew bill();
    DeleteX(one);
    System::Diagnostics::Trace::Assert(one == nullptr); //did not trigger