C++初心者です。
とあるサイトで下のようなポリモーフィズムのサンプルコードが有りまして、
(クラスは省略しています)

int main() {
    Animal* theArray[5];

    theArray[0] = new Dog;
    theArray[1] = new Cat;
    theArray[2] = new Horse;
    theArray[3] = new Pig;
    theArray[4] = new Animal;

    for (int i = 0; i < 5; i++) {
        theArray[i]->Speak();
    }
}

このサンプルはdeleteしていないのでメモリーリークがありまして、
コードの下に
delete theArray[0];
delete theArray[1];
delete theArray[2];
delete theArray[3];
delete theArray[4];
を追加することで収まりましたが、面倒なのでスマートポインタがいいのではないかと思いまして、
下のように書きましたが、エラーで動きません。

int main() {
    unique_ptr<Animal[]> theArray = make_unique<Animal[]>(5);

    theArray[0] = make_unique<Dog>();
    theArray[1] = make_unique<Cat>();
    theArray[2] = make_unique<Horse>();
    theArray[3] = make_unique<Pig>();
    theArray[4] = make_unique<Animal>();

    for (int i = 0; i < 5; i++) {
        theArray[i]->Speak();
    }
}

unique_ptr配列にオブジェクトを入れる方法をはありますでしょうか?

ちなみに、vectorだったら下のようにしてうまくいきました。

int main() {
    vector<unique_ptr<Animal>> theArray;

    theArray.emplace_back(make_unique<Dog>());
    theArray.emplace_back(make_unique<Cat>());
    theArray.emplace_back(make_unique<Horse>());
    theArray.emplace_back(make_unique<Pig>());
    theArray.emplace_back(make_unique<Animal>());

    for (int i = 0; i < 5; i++){
        theArray[i]->Speak();
    }
}