实现std :: list项读/写事件

1 c++ overloading list

我是c ++的新手,但我已经开始考虑一个特定的任务,需要我在每次尝试更改或读取任何列表项时,都需要添加一个特定的代码块.

生成的列表应该尽可能地表现并且看起来尽可能多地使用std :: list,除了这个小的异常,这使我能够在每次读取/写入该列表时执行特定的任务.

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

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

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

我很感激你对这个问题的看法.

Jar*_*Par 5

从std :: list派生几乎肯定不是答案.stl中的集合根本不是从中派生出来的,这样做会导致您遇到问题.

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

std::list* pList = new YourNewListClass();
delet pList; // runs std::list::~list()
Run Code Online (Sandbox Code Playgroud)

您还需要覆盖迭代器上的方法.它需要改变每个可能改变集合的方法.

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

  • 实际上,您的新类可以包含执行大部分工作的私有std :: list成员. (5认同)