小编zen*_*no2的帖子

如何在不失去删除内存的能力的情况下更改 shared_ptr 中的指针?

我遇到了一个问题std::shared_ptr。我有一个代码:

void Receive(const std::shared_ptr<char[]>& data, uint32_t length) {
  this->next->Receive(data + 2, length - 2);
}
Run Code Online (Sandbox Code Playgroud)

我需要将 shared_ptr 增加 2 而不会失去删除内存的能力。

我不想复制数据,因为数据已经在内存中并且我拥有这些数据。如果我可以在不损失性能的情况下更改指针,那么复制数据只是为了替换和删除旧数据是愚蠢的。shared_ptr 可以包含并返回一个指针,但删除另一个吗?

据我所知,shared_ptr 的内部包含一个指向数据的指针,该指针由get()函数返回,并包含对控制块的引用,该引用计数引用,并且应该在所有引用都消失后删除内存。

那么,由于它包含与控制块分开的指针,也许我可以在不更改控制块中分配的内存块的指针的情况下以某种方式更改它,而不会失去删除内存的能力?如果我不能,也许我可以用boost::shared_ptr

我还没有检查过。我不使用Boost库,但如果它对我有帮助,我会的。

c++ memory boost shared-ptr

11
推荐指数
1
解决办法
463
查看次数

如何处理 WinAPI 宏覆盖某些函数名称的情况?

<windows.h>为 WinAPI 的 Ansi 和 Unicode 版本定义宏。SendMessage我的类库中有一个名为的函数。它工作正常,直到<windows.h>在包含我的库之前包含在内。在这种情况下SendMessage,被宏覆盖,函数名称变为SendMessageASendMessageW

是否可以在不更改函数名称的情况下以某种方式处理它,以保存与旧版本库的兼容性?

c c++ windows macros winapi

5
推荐指数
1
解决办法
425
查看次数

标签 统计

c++ ×2

boost ×1

c ×1

macros ×1

memory ×1

shared-ptr ×1

winapi ×1

windows ×1