public ref class ScriptEditor : public Form
{
public:
typedef map<UInt32, ScriptEditor^> AlMap;
static AlMap AllocationMap;
Form^ EditorForm;
RichTextBox^ EditorBox;
StatusBar^ EditorStatusBar;
StatusBarPanel^ StatusBarLineNo;
void Destroy() { EditorForm->Close(); }
ScriptEditor(unsigned int PosX, unsigned int PosY);
};
以上代码抛出错误C2039:'{dtor}':不是'System :: IDisposable'的成员。在查看解释CLR如何管理内存的文章之后,我完全迷失了。任何关于摆脱它的建议将不胜感激。我在C +++ / CLI中的第一个涉猎不太好。
答案 0 :(得分:1)
您没有收到非常好的错误消息。但问题是STL地图&lt;&gt;模板类仅适用于非托管类型。它要求元素类型具有析构函数,托管类型没有析构函数。在C ++ / CLI语言中,使用IDisposable接口模拟析构函数,这是您看到的令人困惑的错误消息的来源。
如果您真的想使用STL,可以使用VS2008中提供的STL/CLR implementation。然而,它被广泛忽略,因为它基本上将STL(昂贵的值语义)的缺点与托管代码的缺点相结合(在引用类型上没有默认值语义)。 This web page将它与本机.NET集合类进行比较,结果显而易见。
此处使用的相应集合类是System::Collections::Generic::Dictionary<>