Я мало что знаю о Haxe, но оператор delete
в AS3 на самом деле не удаляет объекты. Вы действительно не можете форсировать деконструкцию в AS3. Оператор delete
используется для удаления ссылки на свойство динамического объекта. Например:
var foo:Object {
a: "Hello, ",
b: "world!",
toString: function () { return a + b; }
}
foo.toString() // Hello, world!
Этот анонимный объект является динамическим, и свойства могут быть добавлены или удалены. Очень похоже на хэш-таблицу. Теперь рассмотрим следующее:
delete foo.b;
foo.toString(); // Hello, undefined
Когда происходит удаление, foo
освобождает ссылку на свойство b
, делая его undefined
. Однако значение b
не обязательно удаляется из памяти. Если кто-то ссылается на то же значение, оно, скорее всего, останется без изменений. Таким образом, delete
удаляет только ссылки, а не фактические значения, и поэтому не позволяет принудительно собирать мусор.