【发布时间】:2021-09-22 15:05:54
【问题描述】:
我遇到了std::shared_ptr 的问题。我有一个代码:
void Receive(const std::shared_ptr<char[]>& data, uint32_t length) {
this->next->Receive(data + 2, length - 2);
}
我需要将 shared_ptr 增加 2 而不会失去删除内存的能力。
我不想复制数据,因为数据已经在内存中并且我拥有这些数据。如果我可以更改指针而不损失性能,那么复制数据只是为了替换和删除旧数据是愚蠢的。 shared_ptr 是否可以包含并返回一个指针,但删除另一个?
据我所知,shared_ptr 的内部包含指向由get() 函数返回的数据的指针,并包含对控制块的引用,该控制块对引用进行计数,并且应该在所有引用消失后删除内存.
所以,由于它包含与控制块分开的指针,也许我可以在不改变指向控制块中分配的内存块的指针的情况下以某种方式更改它,而不会失去删除内存的能力?如果我不能,也许我可以用boost::shared_ptr 来做?
我还没有检查。我不使用 Boost 库,但如果它对我有帮助,我会使用。
【问题讨论】:
-
您可以改用
void Receive(char* data, uint32_t length)吗?甚至可以考虑void Receive(std::span<char> data);。
标签: c++ memory boost shared-ptr