为什么非 const shared_ptr ref 不工作多态?

问题描述 投票:0回答:1

如果我想使用 shared_ptr 多态,为什么

std::shared_ptr<A>& ptr
不起作用?然而,
const std::shared_ptr<A>& ptr
工作正常。

见以下代码:

class A {
public:
    virtual void foo() { std::cout << "A" << std::endl; }
};

class B : public A {
public:
    void foo() override { std::cout << "B " << std::endl; }
};

void working(const std::shared_ptr<A>& ptr) {
    ptr->foo();
}

void not_working(std::shared_ptr<A>& ptr) {
    ptr->foo();
}

int main() {
    auto ptr = std::make_shared<B>();
    working(ptr);

    not_working(ptr); // <-- error

    return 0;
}
c++ polymorphism
1个回答
0
投票

在其中,您将

shared_ptr<B>
隐式转换为
shared_ptr<A>
。在另一个中,您尝试通过非常量引用传递。

它类似于

foo(const int&)
接受
double
作为输入而
foo(int&)
不会。

如果你删除

&
它会修复错误。

© www.soinside.com 2019 - 2024. All rights reserved.