Привет. Заголовок немного желтоват. На самом деле код выглядит так:

Код AS3:
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
public class GCTest extends Sprite {
public function GCTest() {
stage.addEventListener(MouseEvent.CLICK, stageMouseClickHandler);
}
private function stageMouseClickHandler(event:MouseEvent):void {
var a:A = new A();
addChild(a.vis);
}
}
}
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import flash.system.System;
internal class A {
public var vis:Sprite = new Sprite();
private const _SHAPE:Shape = new Shape();
function A() {
vis.graphics.beginFill(0xFF0000);
vis.graphics.drawCircle(0, 0, 50);
vis.graphics.endFill();
_SHAPE.addEventListener(Event.ENTER_FRAME, entarFrameHandler);
}
private function entarFrameHandler(event:Event):void {
trace('enter frame handler');
System.gc();
}
}
При клике по сцене создается объект... и тут же удаляется сборщиком мусора. Насколько я знаю принцип работы ГЦ, объект не уничтожается, если есть хотя бы одна ссылка на него. Что мы имеем тут? _SHAPE находится не в дисплей листе, но является полем класса A. vis также является полем класса A. Сам класс A наследник Object и объект этого класса создается в локальной области видимости, на него ссылок нет, т.е. он явный кандидат на уничтожение. НО! vis, который является дисплей обжектом и полем класса A находится в дисплей листе. Собственно вопрос - какой именно из этих объектов уничтожается и почему?