2

プログラムの実行時に常に使用できるいくつかの一意のオブジェクトが必要です。私は Singleton デザイン パターンに従いました。メソッドを使用しgetInstance()てオブジェクトを取得することを提案しています。ただし、メソッドを呼び出さずにオブジェクトをすぐに取得することを好みます。そこで、ポインターではなく参照型によって返されるいくつかの一意のオブジェクトを提供するクラスを作成しました。

class Priority
{
public:
    static Priority &High;
    static Priority &Medium;
    static Priority &Low;

    std::string getName(void);
    int getLevel(void);

private:
   Priority(int level, std::string const& name);
   ~Priority();
   Priority(Priority const&);
   const Priority &operator = (Priority const&);

   int level_;
   std::string name_;
};

Priority &Priority::High   = Priority(3, "High");
Priority &Priority::Medium = Priority(2, "Medium");
Priority &Priority::Low    = Priority(1, "Low");

Priority::Priority(int level, std::string const& name)
   : level_(level), name_(name)
{ }

Priority::~Priority() { }

inline std::string Priority::getName(void)
{
    return name_;
}

inline int Priority::getLevel(void)
{
    return level_;
}


上記のクラスを使ったサンプルプログラムを書きました。

int main()
{
    Priority &m = Priority::High;
    std::string name = m.getName();
    int level = m.getLevel();
    return 0;
}


プログラムはうまくいきました。したがって、変数に割り当てられたメモリは Priority &Priority::High = Priority(3, "High");、プログラムが停止するか、クラスを格納している dll ファイルがアンロードされるまで消去されないと想定しました。私は正しいですか?

4

2 に答える 2