C での実装例とは? わかりやすく解説

C++での実装例

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/06/11 16:01 UTC 版)

Singleton パターン」の記事における「C++での実装例」の解説

C++ではクラスコンストラクタコピーコンストラクタコピー代入演算子private にすることで唯一となる。さらにデストラクタprivate にすることで派生クラススタック上への作成禁止できる。 静的ローカル変数利用した実装例を示す。 class Singleton {private: Singleton() {} // コンストラクタprivate に置く。 Singleton(const Singleton&); // コピーコンストラクタprivate に置き、定義しない。 Singleton& operator=(const Singleton&); // コピー代入演算子private に置き、定義しない。 ~Singleton() {} // デストラクタprivate に置く。public: static Singleton& getInstance() { static Singleton inst; // privateコンストラクタ呼び出す。 return inst; } const char* getString() const { return "Hello world!"; }};// 利用例。int main() { std::cout << Singleton::getInstance().getString() << std::endl; return 0;} 静的ローカル変数利用して実装した場合、シングルトンインスタンスを削除するタイミング明示的に制御できないこと注意が必要となる。また、インスタンス生成されるのは最初にgetInstance()関数呼び出したタイミングとなるが、C++11よりも前の規格では静的ローカル変数初期化スレッドセーフ性が保証されないため、複数スレッドから同時に初回アクセス発生した場合未定義動作引き起こす静的ローカル変数ではなくポインタ型静的メンバー変数利用して実装する場合でも、double-checked lockingなどの技法によるスレッドセーフ化が必要となる。 なお、C++11規格では、コンパイラ生成する関数へのdefault/delete指定により、コンストラクタ/デストラクタ以外はprivateに置かなくてもよくなった。また、finalキーワードでクラス修飾することで、派生クラスの定義を禁止することができる。さらに、静的ローカル変数初期化自動的に排他制御され、スレッドセーフとなる。 class Singleton final {private: Singleton() = default; // コンストラクタprivate に置く。 ~Singleton() = default; // デストラクタprivate に置く。public: Singleton(const Singleton&) = delete; // コピーコンストラクタdelete 指定。 Singleton& operator=(const Singleton&) = delete; // コピー代入演算子delete 指定。 Singleton(Singleton&&) = delete; // ムーブコンストラクタdelete 指定。 Singleton& operator=(Singleton&&) = delete; // ムーブ代入演算子delete 指定。...};

※この「C++での実装例」の解説は、「Singleton パターン」の解説の一部です。
「C++での実装例」を含む「Singleton パターン」の記事については、「Singleton パターン」の概要を参照ください。

ウィキペディア小見出し辞書の「C での実装例」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「C での実装例」の関連用語

C での実装例のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



C での実装例のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのSingleton パターン (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2024 GRAS Group, Inc.RSS