我面临的设计问题可以通过以下类汇总:共享缓冲区的链接列表,其中链接元素是SharedBuffer
v_
这个类是错误的,因为它在自己的定义中引用了它自己。但那个想法。有没有想过制作这样的共享缓冲区列表?
答案 0 :(得分:4)
简短的回答是
stl中有许多容器类。 std::vector<>
,std::list<>
或您正在寻找的任何其他容器。不要自己动手。请。你只会犯错误,你的时间可以更好地花在你的程序逻辑上,而不是调试错误的实现,特别是当有免费的好实现时。
std::vector<std::shared_ptr<Buffer>> sharedBuffers;
答案 1 :(得分:0)
如果您的SharedBuffer
确实应该保留共享对象,就像shared_ptr
是共享&#34;对象&#34; (对象在这里是指针,共享意味着共享所有权),但你想让它被引用计数,你可以简单地在其中包含shared_ptr
而不是继承(这是一个坏主意,特别是考虑到问题导致最多make_shared
)。
class SharedBuffer {
private:
std::shared_ptr<Buffer> _buffer;
SharedBuffer _next;
SharedBuffer(Buffer* buffer) : _buffer{buffer} {}
// note the following is now redundant, since it happens automatically
/*~SharedBuffer() {
if (_next)
_next.reset();
}*/
/* Other protected operations (e.g. read/write) */
};
更好的是,您应该已经接受了shared_ptr
构造函数中的SharedBuffer
。