書き物

技術とか作った物の話とか愚痴文句感想など

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

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



世間ではスデに常識だと思われることですが、

僕は知らなかったし、応用範囲が広すぎるので忘れないうちにレポートにしておきます。


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

今まで僕は、

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のポインタに似ているという解釈でいいのでしょうか。


これを使えば、タスクシステムに子タスクを導入できそうです。

さらに、シーン管理(というより作成支援)も作れそうです。

大幅に進むことができそうです。



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

と思いました。