У меня есть класс, который реализует System::ComponentModel::INotifyPropertyChanged
и служит в качестве источника данных. Назовите это SourceThing
. Пусть говорят, что у него есть свойство String
называемое Data
. Он связан с элементом управления Windows Forms следующим образом:
SourceThing ^ mySourceThing = gcnew SourceThing();
myTextbox->DataBindings->Add("Text", mySourceThing, "Data");
Связывание работает так, как ожидалось. Однако деструктор SourceThing
никогда не вызывается, даже если окно, содержащее текстовое поле, расположено (т. SourceThing
деструктор окна, но экземпляр SourceThing
никогда не уничтожается). Единственный способ, которым я могу заставить деструктор работать в SourceThing
- использовать оператор delete
на дескрипторе. Я бы предпочел не хранить ручки во всех источниках данных, когда кажется, что они должны быть уничтожены автоматически, когда форма уничтожена.
Приложение будет создавать и удалять эту конкретную форму много раз, основываясь на действиях пользователя, и иметь много экземпляров SourceThing
плавающих вокруг, не является идеальным. Почему не SourceThing
деструктор SourceThing
уничтожении формы?
Я не уверен в этом, но я думаю, что компилятор создает метод Dispose()
при определении деструктора в классе CLI C++.
Если это так, вы должны вызвать mySourceThing->Dispose()
когда форма закрывается.
Надеюсь, поможет