継承とコンストラクタ・デストラクタ

#include <iostream>
using namespace std;

class Foo {
public:
  Foo() { cout << "Foo constructor" << endl; }
  ~Foo() { cout << "Foo destructor" << endl; }
};

class Bar : public Foo {
public:
  Bar() { cout << "Bar constructor" << endl; }
  ~Bar() { cout << "Bar destructor" << endl; }
};

class Zoo : public Bar {
public:
  Zoo() { cout << "Zoo constructor" << endl; }
  ~Zoo() { cout << "Zoo destructor" << endl; }
};

int main() {
  Zoo zoo;
  return 0;
}


Foo constructor
Bar constructor
Zoo constructor
Zoo destructor
Bar destructor
Foo destructor

追記
「Zoo zoo();」と宣言したら、警告が出て何も出力されず。
どういう動作になるんだろう?
「Zoo zoo = Zoo();」は正常動作。