前のページ次のページ上に戻るホーム SophiaFramework UNIVERSE 5.3

22.2. BREW インターフェース用スマートポインタクラス

SFXBrewPointer クラスは BREW インターフェースを管理するためのスマートポインタクラスです。 このクラスはテンプレートクラスとなっており、ラッパークラスの種類だけ自動的に型が生成されます。

以下のようにして、明示的に型を生成することも可能です。

例 22.1. SFXBrewPointer クラスの使用方法

Void SFXPointerExplainer::_SFXBrewPointer(Void) const
{
    // 以下の 2 種類の変数宣言は同等
    // ( 通常、記述しやすい Smp バージョンを利用する )

    SFXBrewPointer<SFBDisplay> display1;
    SFBDisplaySmp display2;

    // ラッパークラスのインスタンスの生成は、
    // 各ラッパークラスの NewInstance 関数 または GetInstance 関数を利用する
    // ( スマートポインタがインスタンスを管理するので、解放処理は不要 )

    SFBGraphicsSmp graphics;
    SFBGraphicsPtr raw_graphics;

    if ((graphics = SFBGraphics::NewInstance()) != null) {

        // インスタンスの取得成功
    }

    // 管理しているインスタンスの生ポインタの取得

    raw_graphics = graphics.Get();

    // スマートポインタの比較

    if (display1 == display2) {
    }

    if (display1 != display2) {
    }

    // スマートポインタと生ポインタの比較

    if (graphics == raw_graphics) {
    }

    // null ポインタとの比較

    if (graphics != null) {
    }

    // 他の型を表すスマートポインタ同士の比較
    // ( 推奨されないが、設計上可能 )

    if (graphics != display1) {
    }

    // スマートポインタが管理するインスタンスのポインタのキャストは、
    // static_pointer_cast 演算子などを利用する。
    // static_cast 演算子を利用してはいけない。

    SFBBaseSmp base;
    SFBBitmapSmp bitmap;

    base = bitmap;
    bitmap = static_pointer_cast<SFBBitmap>(base);

    // 空インスタンスの取得
    // ( 関数の戻り値として空のインスタンスへの参照を返す場合に便利 )

    SFBFileSmpConstRef file(SFBFileSmp::EmptyInstance());

    unused(file);

    // 管理しているインスタンスの明示的な解放

    SFBFileMgrSmp filemgr;

    if ((filemgr = SFBFileMgr::NewInstance()) != null) {

        // SFXBrewPointer クラスの Release 関数を呼び出す

        filemgr.Release();

        // SophiaFramework 3.0 以上では SFBBase (IBase) クラスの AddRef / Release 関数を呼び出せない

        /*
        filemgr->Release();
        */
    }

    return;
}