gpt4 book ai didi

c++ - 如何在基类 vector 中返回派生对象的拷贝?

转载 作者:行者123 更新时间:2023-11-27 23:19:24 27 4
gpt4 key购买 nike

这就是问题所在,我有一个指向抽象基类的指针 vector ,其中充满了派生对象,如下所示:

class AbstractBase { /* ... */ };  

clase Derived1 : public AbstractBase {
Derived1() { }
Derived1( const AbstractBase& abc ) { /* ... */ }
};

/* ... */

vector< AbstratcBase* > lThingies;

const AbstractBase& getThingie(int pos) {
return *lThingies[pos];
}

为了获取元素的拷贝,我使用派生类“复制构造函数”,如下所示:

Derived1 d1 = getThingie(2);

但问题是我不喜欢这样:在构建类“derived42”时没有办法强制执行这个“复制构造函数”,即使你记得它也很容易出错(就像使它成为递归调用一样,发生在我身上)。

我的问题是: 有更好的方法吗?怎么办?

更新:
我正在寻找的解决方案的“不成文”要求之一是获取 派生 对象的拷贝作为局部变量,因此我不会忘记删除 它。

更多信息:
有许多 lThingies,在运行时,我可以分辨出其中包含哪些派生对象(derived1、derived2 等),但不能在编译时分辨。

最佳答案

您可以在 AbstractBase 中创建一个纯虚拟 clone 函数,它返回一个 AbstractBase 指针,并覆盖 clone在你的派生类中。


严格意见:

虽然(在我看来)这是一种粗俗和过时的做法。我建议重新架构以消除首先执行此操作的需要。

详细说明我对虚拟构造函数习语的“严重和过时”的看法(我相信这会引起争议):

  • 要真正成为健壮/通用的克隆,需要为分配器设置模板,就像某些 STL 构造一样。但是,这不可能。
  • 什么时候你真的想复制一个你不知 Prop 体类型的对象?我质疑该用例的合法性。

关于c++ - 如何在基类 vector 中返回派生对象的拷贝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14383049/

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