【发布时间】:2020-10-05 04:38:55
【问题描述】:
我是 STL 的初学者。我正在尝试编写一个 toystl 来学习 STL。当我编写关于迭代器的代码时,我很困惑是否应该先编写一个简单的 auto_ptr 并从中继承。
我写了一个叫做迭代器的基类。现在它是这样工作的,
struct iterator{};
template <class T>
struct vector_itorater: public toystl::iterator<toystl::random_access_iterator_tag, T>{};
如果我需要另一个像“auto_ptr”一样的基类?就这样
// firstly define a sort of auto_ptr as base class
struct auto_ptr{};
// secondly inherint from auto_ptr
template <class T>
struct vector_itorater: public auto_ptr{};
这行得通吗?还是STL是这样做的?
【问题讨论】:
-
如果您想知道它是如何实现的,只需查看 auto_ptr 的源代码即可。但是,auto_ptr 有一些严重的问题,您应该将 shared_ptr 或 unique_ptr 与更现代的 c++ 一起使用。特别是当您处于学习模式时。最好用最新的 c++ 和一本最新的书来学习。
-
为什么向量的迭代器会继承自
auto_ptr?标准容器的迭代器对它们引用的数据都没有任何所有权。auto_ptr在 C++17 中也已弃用和删除,因此即使迭代器确实拥有数据,auto_ptr也是一个糟糕的选择。 -
通常情况下,迭代器只需要很少的数据。例如,您可以只用一个指针来实现一个向量迭代器。因此,迭代器通常是按值传递的可复制结构,因此类本身不需要内存管理。
-
@doug 谢谢,我明白了。我正在阅读 Soctt Meyers 的
一书。 -
@Miles Budnek 我最初想重用诸如“*”、“->”和“++”之类的操作。这个好像不行