回答編集履歴
1
修正
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
|
20
|
+
std::vector<std::unique_ptr<Base>> vec;
|
20
|
-
vec.push_back(
|
21
|
+
vec.push_back(std::make_unique<Base>());
|
21
|
-
vec.push_back(
|
22
|
+
vec.push_back(std::make_unique<Derived>());
|
22
|
-
vec.push_back(
|
23
|
+
vec.push_back(std::make_unique<Base>());
|
23
|
-
vec.push_back(
|
24
|
+
vec.push_back(std::make_unique<Derived>());
|
24
25
|
|
25
|
-
for (
|
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
|
```
|