我想删除一个带有函数的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;
}
}
答案 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