我有一个数据缓冲区存储在shared_ptr<void>
.
这个缓冲区被组织在几个封装层中,所以我最终得到:
-----------------------------------...
- Header 1 | Header 2 | Data
-----------------------------------...
(实际上它是一个以太网数据包,我在其中逐层解封装)。
一旦我读取了 Header 1,我想将数据包的其余部分传递给下一层进行读取,所以我想创建一个指向:
-----------------------...
- Header 2 | Data
-----------------------...
使用原始指针将非常容易,因为它只是指针算术的问题。但是我怎样才能用 shared_ptr 实现呢?(我使用 boost::shared_ptr):
- 我无法为“第一个 shared_ptr.get() + offset”创建一个新的 shared_ptr,因为将所有权归于公正是没有意义的
Header 2 + Data
(并且 delete 最终会崩溃) - 我不想复制数据,因为它会很傻
- 我希望在两个对象之间共享整个缓冲区的所有权(即,只要父对象或仅需要 Header 2 的对象需要数据,则不应删除数据)。
我可以把它包装成这样的结构,boost::tuple<shared_ptr<void>, int /*offset*/, int /*length*/>
但我想知道是否有更方便/优雅的方式来实现这一结果。
谢谢,