Bruce Eckel撰写的“Thinking in C ++”中的藏匿库:
基本上他似乎正在建立一个数组索引可寻址接口(通过提取)到一组实体,这些实体实际存储在随机存储器位置,而不是实际复制那些数据实体,以便为用户模拟存在实际的连续内存数据块。简而言之,是一个连续的索引地址映射。我有这个权利吗?此外,他的映射是逐字节的;如果它不符合这个要求(我不确定它的重要性),我相信可能有更简单的方法在C ++中生成这样的数据结构。我查看了memcpy,但是没有看到如何在逐个字节的基础上实际复制数据以创建这样的索引结构。
事先发布:
这个库似乎创建了一个指针集合,而不是数据存储集合。 这是真的? (同时适用于C和C ++版本。)因此,名称“stash”可能有点误导,因为只有指向其他地方的数据的指针被放入“藏匿”,而Eckel声称“数据被复制”。
背景:看“添加”和“膨胀”,所谓的“复制”等同于指向其他指针的指针(“存储”到“添加”中的“e”和“存储”中的“存储”)膨胀”)。在这种情况下使用“new”对我来说很奇怪,因为数据的存储确实被分配了,但是“b”被设置为数据的地址,并且似乎没有数据分配在整个库中发生。所以我不确定当“分配的空间”显然从未在库中写入或读取时,“新”的“分配”是什么意思。要添加的“元素”已经存在于内存中的其他位置,而我们正在做的就是为每个希望通过CStash引用的“元素”的每个字节创建一个顺序指针结构。我能正确理解这个库吗?
同样,看起来“嵌套结构”部分中的“堆栈”实际上只能用于数据地址,而不能用于数据。我成功编写了自己的链表列表,实际上将数据存储在堆栈节点中。