gpt4 book ai didi

C++:抛出派生的shared_ptr并捕获基的shared_ptr?

转载 作者:搜寻专家 更新时间:2023-10-31 00:01:28 25 4
gpt4 key购买 nike

好的,有人告诉我这个问题:为什么你可以抛出一个指向派生类的指针并捕获一个指向它的基类的指针......但是你不能用 shared_ptrs 做到这一点?

例如,这个有效:

class Base {};
class Derived : public Base {};
int main()
{
try
{
throw new Derived() ;
}
catch( const Base2 * b )
{
printf("Received a base" ) ;
}

return 0 ;
}

但这不是

int main()
{
try
{
throw std::tr1::shared_ptr<Derived>( new Derived() ) ;
}
catch( const std::tr1::shared_ptr<Base> & b )
{
printf("Received a base" ) ;
}
return 0 ;
}

有什么想法吗?

最佳答案

原因很简单:即使 derivedbase 有关, shared_ptr<derived>shared_ptr<base> 无关所以没有从一个到另一个的隐式转换,除非模板明确提供它(这同样适用于基本上以相同方式实例化的任何其他模板)。

但是,对于异常(exception)情况,我不确定您真正要解决的问题是什么。通常,你想抛出一个对象(不是指针)并且你想捕获一个 const。引用。因为你没有任何真正的可能有多个指针指向同一个异常对象,我不确定你会用 shared_ptr<exception_object> 解决什么问题.

关于C++:抛出派生的shared_ptr并捕获基的shared_ptr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9940147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com