gpt4 book ai didi

C++类设计题

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:16:45 25 4
gpt4 key购买 nike

这是一个关于哪个类对共享指针执行释放的问题。

所以我有一个类层次结构,basederivedA 以及 derivedBderivedC 都来自 基地。 Base有一些虚函数。

我有一个类,Holder,它有一个包含 derivedAderivedBderivedC 实例的集合>。因此创建了 Holder 的实例,动态创建派生类的实例并将它们的指针添加到容器中。我添加了指针,这样我就可以遍历容器并调用 base->virtualFunction。我 new 对象,否则在堆栈上创建的实例在超出范围时会被销毁。

class Base;
class DerivedA : public base;
class DerivedB : public base;
class DerivedC : public base;


class Holder {
std::vector<Base*> collection;
void add(Base* base);
}

Holder holder;
DerivedA* da = new DerivedA;
DerivedB* db = new DerivedB;

holder.add(da);
holder.add(db);

谁将在 dadb 上调用 delete

有没有其他方法可以解决删除问题?

谢谢礼萨

首先我的问题是,哪个类应该负责释放动态创建的派生类?包含列表的类

最佳答案

更简单的方法?改变您的载体以意识到所有权。

boost::ptr_vector<Base>

就是这样一个 vector ,特别适合多态数据:

  • 通过克隆方法进行深度复制(只需实现 virtual Base* clone() const; )
  • 自动内存管理
  • 解引用迭代器上的糖衣(产生 Base& 而不是 Base* )

在 C++11 中,另一种选择可能是 std::vector< std::unique_ptr<Base> > .

关于C++类设计题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7417359/

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