я просмотрел Интернет и этот поток, ища полное ответ этой ситуации я сталкиваюсь. Я считал тот умный бросок указатели на объекты не очень умны. Я просто хочу понять почему этот случай. Я объясню ситуацию. Позволить вообразить это простая иерархия:
class Foo
{
public: virtual ~Foo() {}
};
typedef tr1::shared_ptr<Foo> SPFoo;
class FooInherited: public Foo { };
typedef tr1::shared_ptr<FooInherited> SPFooInherited;
И позволяют нам проверить этот тестовый код:
int main(int argc, char** argv)
{
try
{
throw FooInherited();
}
catch(const Foo& f)
{
cout << "Foo& caught!" << endl;
}
try
{
throw SPFooInherited(new FooInherited());
}
catch(const SPFoo& f)
{
cout << "SPFoo& caught!" << endl;
}
return 0;
}
Все компилирует, но во времени выполнения вторая выгода попытки не будет выполняемый. Кто-то может объяснить меня почему? Особенно, если строки кода как эта работа, превосходная во времени выполнения.
void function(const SPFoo& f)
{
}
...
SPFooInherited fi(new FooInherited());
function(fi);
я действительно понимаю, что проблема состоит в том, что SPFooInherited не наследовался SPFoo (даже при том, что FooInherited наследовался от Foo), но Он глубоко хотел бы знать то, что является выполнением compiler/RTE по-другому по сравнению с примером вызова функции при ловле исключения, чтобы не смочь решить de ситуацию. Это, потому что параметр выгоды не является тем же как параметром вызова функции? Почему работы Foo& и SPFoo не делают?
Заранее большое спасибо.
С уважением, Iker.