我有一段代码可以传递数据缓冲区。我想管理这些缓冲区的生命周期,以便在我完成使用之前不会释放内存。我意识到这std::shared_ptr
适合这项任务。我想做的一件事是将缓冲区的一部分传递给一个函数,同时仍然保持整个缓冲区的所有权信息(例如,切断一个标题并将正文传递给另一个函数)。
我注意到std::shared_ptr
有以下构造函数:
template< class Y >
shared_ptr( const shared_ptr<Y>& r, T *ptr );
这个构造函数允许我创建一个shared_ptr
与它共享所有权r
但存储指针的新的ptr
。这很好,但这会导致引用计数增加。在某些情况下,我可能希望传递缓冲区的一部分而不保留 a shared_ptr
。在这种情况下,我不需要增加引用计数。看来我需要以下构造函数:
template< class Y >
shared_ptr( shared_ptr<Y>&& r, T *ptr );
请注意,这r
是一个右值引用。似乎不存在这样的构造函数std::shared_ptr
。是否有一个原因?有没有办法在不增加引用计数的情况下做我想做的事?