【发布时间】:2011-03-20 15:07:54
【问题描述】:
我最近重新设计了我自己的一个库,以尝试将接口与实现分离。我遇到了一个旨在返回另一个类的实例的类的最终问题。
在接口定义中,我做了类似的事情
struct IFoo
{
virtual const IBar& getBar() = 0;
}
然后在具体的 Foo getBar 看起来像
const IBar& Foo::getBar()
{
Bar ret = Bar();
return ret;
}
问题是 ret 在 getBar 完成后立即被删除,当复制构造函数尝试像这样使用 Bar 时会导致严重崩溃
const Bar myBar = myFoo.getBar();
我一直在阅读各种东西,我知道通过引用返回是不受欢迎的,但我没有看到任何其他方式(我不想返回 Bar* 因为我不想手动删除返回值)。
抽象类返回从另一个抽象类派生的具体类的实例的正确方法是什么(如果有的话)?
注意我确实看到了这个解决方案:returning an abstract class from a function 但我不想使返回值静态和松散的线程安全。
【问题讨论】:
标签: c++ interface abstract-class