如何制作share_ptr列表?

时间:2016-01-29 10:54:22

标签: c++ shared-ptr

我面临的设计问题可以通过以下类汇总:共享缓冲区的链接列表,其中链接元素是SharedBuffer

v_

这个类是错误的,因为它在自己的定义中引用了它自己。但那个想法。有没有想过制作这样的共享缓冲区列表?

2 个答案:

答案 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