我有一个“Texture”类,它在其构造函数中检查用户输入的非法值。如果用户输入了非法值,构造函数会抛出两个异常之一,并且执行会跳出构造函数并进入相关的 catch 块。请看下面的代码:
SSViewer::SSViewer(System::Windows::Forms::Form ^ parentForm, GLsizei iWidth, GLsizei iHeight) : COpenGL(parentForm,iWidth,iHeight)
{
printf("\nSuper inherited COGL const func GO");
cbColour = gcnew array<GLfloat>(4);
cbColour[0] = 0.7f;
cbColour[1] = 0.2f;
cbColour[2] = 0.6f;
cbColour[3] = 0.4f;
//Test Texture
try
{
//Test Texture
Texture* myTex = new Texture("C4 Games 2.png");
}
catch(Texture::nonPOTException& e)
{
System::String^ err = gcnew System::String(e.what());
MessageBox::Show(err, "Sprite Sheet Error", MessageBoxButtons::OK, MessageBoxIcon::Stop);
}
catch(Texture::InvalidSizeException& e)
{
System::String^ err = gcnew System::String(e.what());
MessageBox::Show(err, "Sprite Sheet Error", MessageBoxButtons::OK, MessageBoxIcon::Stop);
}
}
该行:
Texture* myTex = new Texture("C4 Games 2.png");
是将引发异常的行。但是,如果它确实抛出,则在 myTex 的构造完成之前将控制返回到 catch 块。显然,我不希望存在这个不完整、非法初始化的 Texture* 实例。
我想知道的是,如果构造被抛出中止,是用于仍在使用的不完整实例的内存。我需要delete
在 catch-blocks 中调用 myTex 来释放内存吗?