Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > C++/CLI -> C#


Автор: cupper 21.6.2011, 19:32
есть библиотека. написанная на C++/CLI, в ней есть класс X, с методами
Код

~X() {!X()}
!X() {delete native;}

где native это указатель на динамически выделенную память "С++шным выделятором" new.

Есть код на C#, который создает экземпляр сего класса X.
Код

X x = engine.getX();

getX() это тоже из библиотеки C++\CLI и там по средством вызова gcnew создается возвращаемый объект X.

При завершении программы (когда происходит сборка мусора) вызывается финализер !X() и я получаю эксцепшен на попытку чтения записи защищенной памяти.
Но если я в коде явно вызову x.dispose(), то я опять таки попадая в !X() корректно (без эксцепшенов) удаляю объект.

Может мне кто прояснить ситуацию, я просто в С++/CLI вообще не секу. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)