C ++ 11私有默认构造函数

时间:2014-09-08 02:10:25

标签: c++ c++11 gcc default-constructor gcc4.8

以下C ++ 11代码在我的GCC 4.8上成功编译:

struct NonStack
{
private:
  NonStack() = default;
public:
  static NonStack* Create(){
    return new NonStack;
  }
};
NonStack a;

int main() { }

但是,以下内容给出了编译错误:

struct NonStack
{
private:
  NonStack(){}
};

NonStack a; 

int main() { }

为什么第一个成功?私有默认构造函数是否禁止通过NonStack a;禁止创建对象?

1 个答案:

答案 0 :(得分:17)

这是gcc bug 54812,编译器无法尊重明确默认的特殊成员函数的访问说明符。 Bug 56429被标记为前一个的副本,其测试用例几乎与问题中的示例相同。

解决方案是升级到gcc4.9,它解决了这个问题。或者为构造函数创建一个空体,而不是像第二个例子中那样明确地默认它。