基类指针向量转化为智能指针该怎么办?举出两个例子
时间: 2023-12-03 14:42:22 浏览: 122
将基类指针向量转化为智能指针可以使用std::vector<std::unique_ptr<Base>>或std::vector<std::shared_ptr<Base>>。
1. 使用std::vector<std::unique_ptr<Base>>的例子:
```c++
#include <memory>
#include <vector>
class Base {
public:
virtual void doSomething() = 0;
};
class Derived : public Base {
public:
void doSomething() override {
// Do something
}
};
int main() {
std::vector<std::unique_ptr<Base>> vec;
vec.emplace_back(std::make_unique<Derived>());
vec.emplace_back(std::make_unique<Derived>());
for (auto& ptr : vec) {
ptr->doSomething();
}
return 0;
}
```
2. 使用std::vector<std::shared_ptr<Base>>的例子:
```c++
#include <memory>
#include <vector>
class Base {
public:
virtual void doSomething() = 0;
};
class Derived : public Base {
public:
void doSomething() override {
// Do something
}
};
int main() {
std::vector<std::shared_ptr<Base>> vec;
vec.push_back(std::make_shared<Derived>());
vec.push_back(std::make_shared<Derived>());
for (auto& ptr : vec) {
ptr->doSomething();
}
return 0;
}
```
这两个例子都使用了多态,通过将Derived对象的指针转换为Base指针,可以将它们存储在一个向量中。使用unique_ptr或shared_ptr可以避免手动释放指针的问题。unique_ptr拥有所有权,即当向量元素被删除时,它们将自动删除。shared_ptr使用引用计数,即当最后一个引用到达时,它们将自动删除。
阅读全文