c++ shared_ptr<>报错2440
时间: 2023-11-07 18:05:03 浏览: 93
2440 错误通常是由于试图将一个指向基类的 shared_ptr 赋值给指向派生类的 shared_ptr 而导致的。这是因为 shared_ptr 是不允许隐式类型转换的,必须使用 std::static_pointer_cast 或 std::dynamic_pointer_cast 进行显式类型转换。
例如:
```c++
class Base {
public:
virtual void doSomething() {}
};
class Derived : public Base {
public:
void doSomething() override {}
};
int main() {
std::shared_ptr<Base> basePtr = std::make_shared<Derived>();
std::shared_ptr<Derived> derivedPtr = basePtr; // 错误,无法隐式转换
std::shared_ptr<Derived> derivedPtr2 = std::static_pointer_cast<Derived>(basePtr); // 正确,使用静态转换
return 0;
}
```
在上面的例子中,我们首先创建了一个指向 Derived 类型的 shared_ptr,并将其赋值给一个指向 Base 类型的 shared_ptr。然后我们试图将这个指向 Base 类型的 shared_ptr 赋值给一个指向 Derived 类型的 shared_ptr,但这是不允许的。我们必须使用 std::static_pointer_cast 将其显式转换为指向 Derived 类型的 shared_ptr,这样就可以通过编译了。
阅读全文