オブジェクトを代入した変数の正体

本日は予定を変更して、別のレポートをお送りいたします。




世間ではスデに常識だと思われることですが、
僕は知らなかったし、応用範囲が広すぎるので忘れないうちにレポートにしておきます。


タイトルどおり、オブジェクトを代入した変数ですが、
今まで僕は、

var testObj1:TestClass = new TestClass();
var testObj2:TestClass = testObj1;

とした場合、testObj1とtestObj2は別物で、
TestClassインスタンスが2つできるものだと思っていました。


そこで実験です。
以下の2つのファイルを用意します。
TestParent.as

class TestParent
{
    var atai:String;
    private var obj:TestChild;
    
    function TestParent()
    {
        atai = "Yes!";

        trace(atai);

        obj = new TestChild(this);

        trace(atai);
    }
}

TestChild.as

class TestChild
{
    function TestChild(parentObj:TestParent)
    {
        parentObj.atai += "Yes!";
        var obj:TestParent = parentObj;
        obj.atai += "Yes!";
    }
}

そしてflaファイルのフレーム1にでも、

var test:TestParent = new TestParent();

とでも書いて実行してみます。


出力は

Yes!
Yes!Yes!Yes!

となりました。


・・・ということは、
オブジェクトをほかの変数に代入しても、
実際に存在するオブジェクトは1つしかないということが分かります。
すべて同期している・・・というより、
Cのポインタに似ているという解釈でいいのでしょうか。


これを使えば、タスクシステムに子タスクを導入できそうです。
さらに、シーン管理(というより作成支援)も作れそうです。
大幅に進むことができそうです。




色々誤解しながら覚えてしまっているなぁ...。
と思いました。