Система :: IDisposable беды - PullRequest
       12

Система :: IDisposable беды

0 голосов
/ 13 марта 2010
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 не проходит хорошо.

1 Ответ

1 голос
/ 13 марта 2010

Вы не получаете очень хорошее сообщение об ошибке. Но проблема в том, что шаблонный класс STL map <> подходит только для неуправляемых типов. Требуется, чтобы у типа элемента был деструктор, у управляемых типов его нет. В языке C ++ / CLI деструкторы моделируются с помощью интерфейса IDisposable, который является источником сбивающего с толку сообщения об ошибке.

Если вы действительно хотите использовать STL, вы можете реализовать STL / CLR , доступную в VS2008. Однако это довольно широко игнорируется, поскольку в основном объединяет недостатки STL (семантика дорогостоящих значений) с недостатками управляемого кода (нет семантики значений по умолчанию для ссылочных типов). Эта веб-страница сравнивает ее с собственными классами коллекций .NET, мягко говоря, с впечатляющими результатами.

Подходящий класс коллекции для использования здесь: System :: Collections :: Generic :: Dictionary <>

...