gpt4 book ai didi

c++ - 实现 std::list 项读/写事件

转载 作者:太空宇宙 更新时间:2023-11-03 10:37:04 26 4
gpt4 key购买 nike

我是 C++ 的新手,但我已将心思放在一项特定任务上,该任务需要我启用添加特定代码块,以便在尝试更改或读取任何列表项时执行。

结果列表的行为和外观应尽可能符合 std::list 的要求,除了这个小异常,它使我能够在即将读取/写入此列表时执行特定任务。

根据我目前的发现,我所能想到的就是从 list::iterator 派生一个类并重载它的 operator* 和 operator= 来实现这些特定任务。

然后我应该从 std::list 派生一个类,并通过重载 begin() 和 end() 方法使其使用我的新迭代器类型。还是有更好的方法让它使用自定义迭代器?

这将处理迭代器访问,但我可以看到列表甚至可以返回指向它的成员的指针。我想我对此无能为力,必须从我的新列表类中删除此功能。

非常感谢您对此主题的意见。

最佳答案

从 std::list 派生几乎肯定不是答案。 STL 中的集合根本不是从中派生的,这样做会给你带来麻烦。

why的经典例子就是析构函数问题。 STL 集合中的析构函数不是虚拟的。如果通过对 std::list 的引用删除对象,这将破坏您放置在派生类析构函数中的任何逻辑。例如

std::list* pList = new YourNewListClass();
delet pList; // runs std::list::~list()

除了迭代器上的方法之外,您还需要覆盖更多的东西。这将需要更改所有可能改变集合的方法。

更稳定的方法是实现您自己的 std::list 样式类,它遵循标准的 STL 容器行为。然后,您可以在需要事件的地方包含使用此列表,而不会遇到从 std::list 派生的问题。

关于c++ - 实现 std::list 项读/写事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1397490/

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