2017-04-20 11 views
2
class class1 
{ 
private: 
    class1() = delete; 
public: 
    class1(int a) {} 
}; 

class class2 
{ 
    class1 obj; 
}; 

以上编译与VS2015更新3.我创建一个私人构造函数,它也被删除。其中一个应该已经创建了一条错误消息。我在这里错过了什么?为什么我可以在C++中调用已删除的私有构造函数?

+1

尝试在'main'中添加'class2 foo;'。 – NathanOliver

+1

你真的尝试过[实例化'class2'的实例](http://ideone.com/i9gRrC)吗? – WhozCraig

+5

我没有看到任何企图调用私有删除的构造函数。 – aschepler

回答

8

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

没有错。

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

没有。

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

你不能,你没有。

我在这里错过了什么?

一个电话。

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

现在尝试下列任一:

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

…并观看火花飞翔。

0

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

相关问题