コード:
struct A
{
private:
A() = default; // Version 1.
};
struct B : public A
{};
struct C
{
private:
C() {}; // Version 2.
};
struct D : public C
{};
int main()
{
B b; // Compiles under g++ 4.7.2
D d; // Compilation error under g++ 4.7.2
}
そして2つの状況(gcc 4.7.2を使用):
- このコードを(Aのコンストラクターのバージョン1を使用して)コンパイルしても、問題はありません。
D::D()
2番目のコンストラクターを使用する場合、gccはそれがプライベートであると言います。
質問:デフォルトのコンストラクターを使用すると、なぜ問題が解消されるのですか?A
プライベートコンストラクターがある場合、他のクラスはA
、そのコンストラクターの実装の「デフォルト」に関係なく、その派生クラスでさえも、のインスタンスを作成することはできません。