"delete" 不破坏数据的指针

"delete" pointer without destroying data

我对 C++ 比较陌生。我正在分配缓冲区:

uint8 *buffer = new uint8[len];

使用第 3 方库,我使用 "img" 对象(它是一张图片)的方法将 "take over" 缓冲区作为原始图像数据:

img->SetBuffer((uint8*)data);

我怀疑 "taking over" 实际上意味着 "img" 对象有自己的指针,在 "SetBuffer" 之后指向 "buffer" 中的数据。一切正常,但我的编译器抱怨(这是警告,而不是错误)内存泄漏。如果我在 SetBuffer 之后添加此行:“delete buffer;”,则警告消失,但同时我的 "img" 结束为空白(无数据)。如何避免编译器警告并保留数据?有没有办法只删除 "buffer" 指针本身,而不破坏它指向的数据?稍后在代码中,我删除了 "img" 对象,我猜这会清除所有图像数据。

如果 img 没有释放它的缓冲区,你必须在释放 img 后释放它。

delete img;
delete [] buffer;

您应该阅读 class(*img 类型)的文档(或来源)。

  1. 检查您关于 SetBuffer 的假设是否正确。
  2. 检查 class 是否在销毁时释放缓冲区。

如果 class 没有销毁缓冲区本身,您必须在销毁 img 指向的对象后进行销毁。

-编辑-

正如 MSalters 正确指出的那样,如果内存由 class 本身释放(即使用 new[]delete[]allocator::allocate()allocator::deallocate()malloc()free()...)

[Rem:您的问题表明 class 不会按照您使用它的方式进行任何重新分配。]