"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
类型)的文档(或来源)。
- 检查您关于
SetBuffer
的假设是否正确。
- 检查 class 是否在销毁时释放缓冲区。
如果 class 没有销毁缓冲区本身,您必须在销毁 img
指向的对象后进行销毁。
-编辑-
正如 MSalters 正确指出的那样,如果内存由 class 本身释放(即使用 new[]
和 delete[]
,allocator::allocate()
与 allocator::deallocate()
、malloc()
与 free()
...)
[Rem:您的问题表明 class 不会按照您使用它的方式进行任何重新分配。]
我对 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
类型)的文档(或来源)。
- 检查您关于
SetBuffer
的假设是否正确。 - 检查 class 是否在销毁时释放缓冲区。
如果 class 没有销毁缓冲区本身,您必须在销毁 img
指向的对象后进行销毁。
-编辑-
正如 MSalters 正确指出的那样,如果内存由 class 本身释放(即使用 new[]
和 delete[]
,allocator::allocate()
与 allocator::deallocate()
、malloc()
与 free()
...)
[Rem:您的问题表明 class 不会按照您使用它的方式进行任何重新分配。]