0 c++ inheritance explicit-constructor rule-of-three
我对此有疑问:
class A
{
int a;
int* pa;
public:
A(int i):a(i) , pa(new int(a))
{
cout<<"A ctor"<<a<<endl;
}
~A()
{
delete pa;
cout<<"dtor\n";
}
int * &get()
{
return pa;
}
};
class B : public A
{
int b;
public:
B (A obj): A(obj) , b(0)
{
cout<<"B ctor\n";
}
~B()
{
cout<<"B dtor\n";
}
};
int main()
{
int i = 23 ;
A* p = new B(i);
}
Run Code Online (Sandbox Code Playgroud)
可以告诉我为什么最后一行main编译?我传递一个int进入B的构造,其预期的A目的,而不是.我相信它int被翻译成了一个Ain B的构造函数,但为什么呢?
提前致谢.
Avri.
由于您没有声明A构造函数explicit编译器创建的anomymous情况下A使用i,并使用它来初始化B实例.如果您不希望编译器执行这些隐式转换,请将您的costructor声明为explicit.然后你会得到一个编译器错误.