21

以下 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;吗?

4

1 回答 1

18

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

解决方案是升级到gcc4.9,解决了这个问题。或者为构造函数创建一个空主体,而不是像在第二个示例中所做的那样显式默认它。

于 2014-09-08T02:26:39.030 回答