デフォルトのコンストラクタがプライベートの場合、このようなC++の行はどのようにしてFoo t3 = Foo::construct(true);
が機能しますか?私の前提(明らかに間違っている)は、デフォルトのコンストラクタが呼び出され、代入演算子の後に続くことです。その仮定は、デフォルトのコンストラクタがprivateであり、呼び出すことができないため、正しくないはずです。静的メソッドクラスのインスタンス化
具体的な例:t3
がインスタンス化されたときに、本当に背後で起こっている
int main() {
//Foo t1; //Not allowed, compile error, Foo() is private
Foo t2(true); //Constructor, valid use
Foo t3 = Foo::construct(true); //It works! Why?
return 0;
}
何:
class Foo {
private:
Foo() {}
bool bar;
public:
Foo(bool t): bar(t) {}
static Foo construct(bool t) {
Foo temp; //calling private constructor;
temp.bar = t;
return temp;
}
}
そして、このクラスをインスタンス化するための試験方法は次のようになりますか?
'Foo t3 = Foo :: construct(true);'はコピーを作成します(symantically)。それは何が間違っていますか? – NathanOliver
@ NathanOliverコピーコンストラクタがこのケースで自動生成されるかどうかは確かに分かりませんが、それはどうでしょうか? –
@πάντῥῖῖ/ 12.8 *クラス定義が明示的にコピーコンストラクタを宣言していない場合、暗黙的に宣言されます* – NathanOliver