如果我想使用 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;
}
在其中,您将
shared_ptr<B>
隐式转换为 shared_ptr<A>
。在另一个中,您尝试通过非常量引用传递。
它类似于
foo(const int&)
接受double
作为输入而foo(int&)
不会。
如果你删除
&
它会修复错误。