2011-02-01 9 views
0

C++コードでオブジェクトを作成し、ActionScriptコードで返す場合は、返す前にAS3_Releaseを呼び出す必要がありますか?例えば、私は* .ggファイル内の関数を持っている:AS3_Releaseを呼び出すとき

public function makeThumbnail(...): Object 
{ 
    AS3_Val objDestByteArray = AS3_New(ByteArray_class, no_params); 
    int intDestWidth; 
    int intDestHeight; 

    // ... make some calculations and set results as object properties 

    AS3_Val result = AS3_Object("width:IntType, height:IntType, data:AS3ValType", intDestWidth, intDestHeight, objDestByteArray); 

    // Do I need to call this? 
    //AS3_Release(objDestByteArray); 
    //AS3_Release(result); 

    return result; 
} 

は私がobjDestByteArrayためAS3_Releaseresult変数を呼び出す必要がありますか?

答えて

1

すべてのユニークな変数は、最終的にリリースする必要があります。AS3_ValAS3_Valの戻り値の場合、関数は値そのものを解放せず、呼び出し側が値の最終的な解放を手配することを前提としています。

あなたの例では、objDestByteArrayをリリースしますが、まだresultをリリースしていません。誰でもmakeThumbnailと呼んでいる人は、その戻り値を解放する責任があります。

+0

答えをありがとう! 'result'変数について少し説明してください。このオブジェクトは、GCがすべての参照を自動的に処理するため、オブジェクトを解放するメソッドがないactionscriptコードに返されます。だから、私は、GCがこのオブジェクトを最終的にきれいにすることを願っています。 –

+0

@Andrey:はい。あなたの関数が参照カウントが1である 'AS3_Val'を返す場合、この値を消去するための完全な責任が呼び出し側に移ります。これにはAlchemyが関数を呼び出すコールバック関数が含まれ、戻り値のクリーンアップには責任があります。 – Gunslinger47

+0

私はそれをリリースする 'result'を追加し、参照カウント0でそれを返すことはオプションでさえありません。 'AS3_Release'を呼び出した直後に値が消えて、戻り値が得られなくなることがあります。 – Gunslinger47

関連する問題