这是this question的跟进
在下面的代码中,为什么第1行编译而第2行和第3行不编译(使用Visual C++ 2010)
class ABase
{
protected:
ABase() {}
~ABase() {}
private:
ABase( const ABase& );
const ABase& operator=( const ABase& );
};
class A : ABase
{
};
class B
{
public:
B() {}
~B() {}
private:
B( const B& );
const B& operator=( const B& );
};
int main( void )
{
A a = A(); // line 1
A a2( a ); // line 2
B b = B(); // line 3
return 0;
}
(注意BA是boost::noncopyable的拷贝)
编辑:
我的问题不是想知道为什么第2行和第3行不编译(我知道复制构造函数是私有(private)的),而是为什么第1行会编译。
最佳答案
编译器在接受首次使用时是错误的。即使删除了拷贝,也必须可以访问拷贝构造函数才能使代码正确。
在这种特殊情况下,A
中有一个隐式声明的拷贝构造函数:
这是隐式定义的:
关于c++ - 私有(private)拷贝构造函数/赋值运算符和拷贝初始化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6524185/