teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

修正

2021/05/14 12:32

投稿

episteme
episteme

スコア16612

answer CHANGED
@@ -2,6 +2,7 @@
2
2
  ```C++
3
3
  #include <iostream>
4
4
  #include <vector>
5
+ #include <memory>
5
6
 
6
7
  class Base {
7
8
  public:
@@ -16,17 +17,16 @@
16
17
  };
17
18
 
18
19
  int main() {
19
- std::vector<Base*> vec;
20
+ std::vector<std::unique_ptr<Base>> vec;
20
- vec.push_back(new Base());
21
+ vec.push_back(std::make_unique<Base>());
21
- vec.push_back(new Derived());
22
+ vec.push_back(std::make_unique<Derived>());
22
- vec.push_back(new Base());
23
+ vec.push_back(std::make_unique<Base>());
23
- vec.push_back(new Derived());
24
+ vec.push_back(std::make_unique<Derived>());
24
25
 
25
- for ( Base* item : vec ) {
26
+ for ( auto& item : vec ) {
26
- Derived* der = dynamic_cast<Derived*>(item);
27
+ Derived* der = dynamic_cast<Derived*>(item.get());
27
28
  if ( der ) { der->derived_fn(); }
28
29
  else { item->base_fn(); }
29
- delete item;
30
30
  }
31
31
  }
32
32
  ```