class class1
{
private:
class1() = delete;
public:
class1(int a) {}
};
class class2
{
class1 obj;
};
以上编译与VS2015更新3.我创建一个私人构造函数,它也被删除。其中一个应该已经创建了一条错误消息。我在这里错过了什么?为什么我可以在C++中调用已删除的私有构造函数?
class class1
{
private:
class1() = delete;
public:
class1(int a) {}
};
class class2
{
class1 obj;
};
以上编译与VS2015更新3.我创建一个私人构造函数,它也被删除。其中一个应该已经创建了一条错误消息。我在这里错过了什么?为什么我可以在C++中调用已删除的私有构造函数?
我正在创建一个私有构造函数,它也被删除。
没有错。
其中一个应该已经创建了一条错误消息。
没有。
为什么我可以在C++中调用已删除的私有构造函数?
你不能,你没有。
我在这里错过了什么?
一个电话。
这个程序中没有任何东西试图实例化任何东西,所以没有什么可以失败。
现在尝试下列任一:
int main()
{
class1 obj;
}
//----
int main()
{
class2 obj;
}
…并观看火花飞翔。
你在这里遗忘的是类是蓝图的对象。当您创建class2
并在其中包含class1
成员时,您实际上并没有调用它。这只是一个蓝图,而不是实际的运行代码。如果您尝试实例化class2
,则应该会出现错误。
尝试在'main'中添加'class2 foo;'。 – NathanOliver
你真的尝试过[实例化'class2'的实例](http://ideone.com/i9gRrC)吗? – WhozCraig
我没有看到任何企图调用私有删除的构造函数。 – aschepler