隐式共享的核心思想似乎是使用更常见的“写时复制”术语。写时复制的想法是让每个对象作为指向实际实现的指针的封装器。每个实现对象跟踪指向它的指针数。每当在封装器对象上执行操作时,它会被转发到执行实际工作的实现对象。这种方法的优点是这些对象的复制和销毁非常便宜。要复制对象,我们只需创建一个新的封装器实例,将其指针设置为指向实现对象,然后增加指向对象的指针数(顺便说一句,这有时被称为引用计数)。销毁类似-我们将引用计数减少1,然后查看是否有其他人指向实现对象。如果没有,则释放其资源。否则,我们什么也不做,只假设其他人稍后会进行清理。这种方法的挑战在于,这意味着多个不同的对象都将指向相同的实现。这意味着如果某人最终对实现进行更改,则引用该实现的每个对象都将看到更改-这是一个非常严重的问题。为了解决这个问题,每次执行可能潜在地更改实现的操作时,操作都会检查是否有其他对象也通过查看引用计数是否完全相同来引用该实现。如果没有其他对象引用该对象,则操作可以继续-没有可能传播更改。如果至少有一个其他对象引用数据,则封装器首先为自己制作实现的深层副本,并将其指针更改为指向新对象。现在我们知道不可能有任何共享,可以轻松进行更改。如果您想查看这些内容的示例,请查看斯坦福大学介绍C ++编程课程的讲座示例15.0和16.0。它展示了如何使用此技术设计一个包含单词列表的对象。希望能对您有所帮助!