<分区>
对于我的问题,我需要你考虑这个结构:
struct Foo
{
Foo() { /* hooray, this is default ctor! */ }
private:
Foo(const Foo&);
};
当我想像这样实例化它时:
Foo foo = Foo();
编译器提示 Foo
的复制构造函数不可访问(或为 C++11 删除)。为什么需要复制构造函数来初始化我的对象?
无论如何,我公开了这个复制构造函数希望它会被调用...但是你猜怎么着?不是!
所以,这是我的问题:为什么编译器需要一个它实际上不用来实例化我的对象的复制构造函数?
注意:我在编写 auto foo = Foo();
编辑:
- g++ 4.8:删除copy ctor会产生编译错误
- msvc (vc100, vc120): 如果复制ctor被删除不报错
- 在任何情况下:将复制构造函数设为私有(private)会产生编译错误