[解決済み] C++でプライベートコンストラクタが必要なのはどんなとき?
2022-03-13 08:29:28
質問
C++のプライベートコンストラクタについて質問です。コンストラクタがprivateの場合、そのクラスのインスタンスはどのように作成すればいいのでしょうか?
クラス内にgetInstance()メソッドを用意した方が良いのでしょうか?
どのように解決するのですか?
を持つ場合、いくつかのシナリオがあります。
private
のコンストラクタを使用します。
-
以外のオブジェクトの作成を制限する
friend
この場合、すべてのコンストラクタはprivate
class A { private: A () {} public: // other accessible methods friend class B; }; class B { public: A* Create_A () { return new A; } // creation rights only with `B` };
-
特定のタイプのコンストラクタ(コピーコンストラクタ、デフォルトコンストラクタなど)を制限する。
std::fstream
は、このようなアクセス不能なコンストラクタによるコピーを許可しません。class A { public: A(); A(int); private: A(const A&); // C++03: Even `friend`s can't use this A(const A&) = delete; // C++11: making `private` doesn't matter };
-
外部に公開しないことを前提とした、共通のデリゲートコンストラクタを持つこと。
class A { private: int x_; A (const int x) : x_(x) {} // common delegate; but within limits of `A` public: A (const B& b) : A(b.x_) {} A (const C& c) : A(c.foo()) {} };
-
対象 シングルトンパターン シングルトンの場合
class
が継承されない場合(継承される場合はprotected
コンストラクタ)class Singleton { public: static Singleton& getInstance() { Singleton object; // lazy initialization or use `new` & null-check return object; } private: Singleton() {} // make `protected` for further inheritance Singleton(const Singleton&); // inaccessible Singleton& operator=(const Singleton&); // inaccessible };
関連
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] ルール・オブ・スリーとは?
-
[解決済み] コピーアンドスワップ慣用句とは?
-
[解決済み] C#でベースコンストラクタを呼び出す
-
[解決済み] あるコンストラクタを別のコンストラクタから呼び出す
-
[解決済み] パブリック、プライベート、プロテクトの違いは何ですか?
-
[解決済み] Pythonにはクラス内に「プライベート」変数がある?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】Singleton。どのように使用するべきか