unique_ptr配列にオブジェクトを入れる方法
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();
}
}