コンストラクタが勝手に代入してくれてうれしいんだけど、なんか不思議

状況

  • クラスBがクラスAを所有
  • クラスCのコンストラクタがクラスBを引数として要求

って状況の時にクラスCのコンストラクタにクラスAのオブジェクトを渡しても動作しますよと。これを継承を使わないできましたよと。
ミソはクラスBにクラスAのオブジェクトを引数としたコンストラクタを用意しておく点。

#include <iostream>
using namespace std;

class A
{
public:
	A(){}
	A(int x): val(x){}
	int val;
};
class B
{
	A a_;
public : 
	B(const A &a){
		a_.val = a.val; 
	}
	int EvaluateA() const{
		return a_.val;
	}
};
class C
{
public :
	C(const B& b){
		cout << b.EvaluateA() << endl;
	}
};
int main()
{
	A *a = new A(10);
	C *c = new C(*a);
	delete c;
	delete a;

	return 0;
}

勝手にBのコンストラクタ呼んでコピーしてくれてるんだろうけど、なんか不思議な挙動。