1
const参照のbase
タイプA
を返す関数getA()
があります。それはdynamic_cast
できません。したがって、const参照のコピーを作成して参照を作成します。オブジェクトをコピーし、私はコピーされたオブジェクトの参照にdynamic_cast
を呼び出すと、それは失敗し、コードを以下に示す:コピーされたオブジェクトへの参照のdynamic_castが失敗しました
struct A {
int c = -1;
virtual ~A() {}
};
struct B : A {int aa = 0;};
const A& getA(){
std::unique_ptr<A> ap(new B);
return *ap;
}
int main()
{
const A& a = getA();
A acopy = a;
acopy.c = -2;
A& acopyr = acopy;
std::cout << a.c << std::endl;
try{
B& b = dynamic_cast<B&>(acopyr);
std::cout << b.aa << std::endl;
}catch(std::bad_cast b){
std::cout << "bad" << std::endl;
}
}
出力
-1
bad
'dynamic_cast (a)'は必要なものではありませんか?編集:また、 'getA()'は、 'ap'がその中括弧でその肩代わりを破壊するので、手掛かりのない参照を返します。 – Quentin
なぜ 'acopy'は' B'だと思いますか?あなたは 'A acopy = a;'で 'A 'にします。 – NathanOliver
@ NathanOliverでも 'a'は' B'ですが、そうではありませんか? – user3828398