shared_ptr 基类指针指向子类
时间: 2024-09-12 16:14:04 浏览: 46
智能指针类型转换.pdf
`shared_ptr` 是 C++ 中的一种智能指针,它提供了自动的内存管理功能,可以在多个指针之间共享同一个对象的所有权。当一个 `shared_ptr` 基类指针指向一个子类对象时,这种方式被称为多态。
在 C++ 中,当你有一个基类指针指向一个派生类对象时,基类指针可以使用多态性质调用派生类的方法。这是因为基类指针实际存储的是派生类对象的地址,通过基类的接口调用时,会根据实际的对象类型(即派生类)来调用相应的方法。但是,直接使用基类指针时,只能调用基类中定义的接口。
然而,当基类指针升级为 `shared_ptr<基类>` 类型后,情况就不同了。`shared_ptr` 能够利用多态性来引用派生类对象,且在调用虚函数时,会正确地解析到派生类中的实现,而不是基类的版本。这归功于 `shared_ptr` 内部维护的引用计数机制,它确保即使在多态情况下,对象的生命周期也能得到正确的管理。
为了实现这一点,你需要确保基类中至少有一个虚函数,通常是虚析构函数。这样,当通过基类指针删除对象时,会调用正确的析构函数,即派生类的析构函数。
例如:
```cpp
class Base {
public:
virtual ~Base() {} // 虚析构函数以支持多态性
};
class Derived : public Base {
public:
void doSomething() override {
// 特定于 Derived 的实现
}
};
int main() {
std::shared_ptr<Base> basePtr = std::make_shared<Derived>(); // 创建一个 Derived 类型的对象
basePtr->doSomething(); // 调用 Derived 类中重写的 doSomething 方法
}
```
阅读全文