gpt4 book ai didi

c++ - 如何使抽象类正确返回另一个抽象类的具体实例?

转载 作者:太空宇宙 更新时间:2023-11-04 14:36:08 25 4
gpt4 key购买 nike

我最近重新设计了我自己的一个库,以尝试将接口(interface)与实现分开。我遇到了一个类的最后一个问题,该类旨在返回另一个类的实例。

在接口(interface)定义中,我做了类似的事情

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但我不想使返回值静态和松散的线程安全。

最佳答案

使用智能指针。这些是不再使用时删除的指针(参见示例 http://www.boost.org/doc/libs/1_43_0/libs/smart_ptr/smart_ptr.htm)。

关于c++ - 如何使抽象类正确返回另一个抽象类的具体实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3327307/

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