为什么我可以在C ++中调用已删除的私有构造函数?

时间:2017-04-20 23:10:46

标签: c++ constructor

class class1
{
private:
    class1() = delete;
public:
    class1(int a) {}
};

class class2
{
    class1 obj;
};

以上编译VS2015更新3.我正在创建一个也被删除的私有构造函数。其中一个应该已经创建了一条错误消息。我在这里缺少什么?

2 个答案:

答案 0 :(得分:8)

  

我正在创建一个也被删除的私有构造函数。

没错。

  

其中一个应该已经创建了一条错误消息。

不。

  

为什么我可以在C ++中调用已删除的私有构造函数?

你不能,而你没有。

  

我在这里缺少什么?

致电。

这个程序中没有任何东西试图实例化任何东西,所以没有什么可失败的。

现在尝试以下任一方法:

int main()
{
    class1 obj;
}
//----
int main()
{
    class2 obj;
}

......看着火花飞扬。

答案 1 :(得分:0)

你在这里忘记的是,类是对象的蓝图。当您使用class2成员创建class1时,您实际上并没有调用它。它只是一个蓝图,而不是实际的运行代码。如果您尝试实例化class2,则应该收到错误。