AS3: почему это происходит? - PullRequest
0 голосов
/ 31 марта 2010

Я только что столкнулся со странной проблемой:

var a:ClassA = new ClassA;
var b:ClassA = a;

Программа иногда продолжает работать, a = null, b = null.

Программа сложная, я уверен, что ни одна из частей не коснется a и b. У меня вопрос, будет ли среда выполнения (сборщик мусора) собирать память «а», а затем присвоить a и b значение null?

Я в замешательстве, спасибо!

Ответы [ 2 ]

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

Сборщик мусора освободит память, которую занимает этот экземпляр ClassA, только после того, как на него больше не будет ссылки. Пока a ИЛИ b ссылается на эту область памяти, экземпляр останется. Если это локальные переменные, то экземпляр будет подхвачен GC в некоторый момент после выхода из функции / метода. Если это переменные экземпляра, они будут оставаться до тех пор, пока не будет собран экземпляр определяющего класса.

0 голосов
/ 31 марта 2010

1001 * попробовать *

var a:ClassA = new ClassA();
var b:ClassA = a;

() в конце имени класса вызывает конструктор, так что у вас действительно есть ваш ClassA.

...