Cha*_*les 0 c++ abstract-class interface
我最近重新编写了一个自己的库来尝试将接口与实现分离.我在最后一个问题上遇到了一个用于返回另一个类的实例的类.
在接口定义中,我做了类似的事情
struct IFoo
{
virtual const IBar& getBar() = 0;
}
Run Code Online (Sandbox Code Playgroud)
然后在具体的Foo getBar看起来像
const IBar& Foo::getBar()
{
Bar ret = Bar();
return ret;
}
Run Code Online (Sandbox Code Playgroud)
问题是,一旦getBar完成就会删除ret,当复制构造函数试图像这样使用Bar时会导致严重崩溃
const Bar myBar = myFoo.getBar();
Run Code Online (Sandbox Code Playgroud)
我一直在阅读各种各样的东西,我知道通过引用返回是不受欢迎的,但我没有看到任何其他方式(我不想返回Bar*因为我不想手动删除返回值).
抽象类返回从另一个抽象类派生的具体类的实例的正确方法(如果存在任何方式)是什么?
注意我确实看到了这个解决方案:从函数返回一个抽象类, 但我不想让返回值静态和松散线程安全.
使用智能指针.这些指针在不再使用时被删除(参见例如http://www.boost.org/doc/libs/1_43_0/libs/smart_ptr/smart_ptr.htm).