Mr.*_*eit 3 c++ pointers memory-management
以下哪项是避免内存泄漏的正确方法?
//Option A
char* data = new char[4];
data = new char[5];
delete[] data;
//Option B
char* data = new char[4];
delete[] data;
data = new char[5];
delete[] data;
Run Code Online (Sandbox Code Playgroud)
选项 A 中存在明显的内存泄漏。假设您已new char[4];
在某个内存位置分配了内存0x7256AC7D
并data
指向该位置。然后,在不删除它的情况下,您已经分配了另一个内存位置new char[5];
并data
指向这个新位置。现在您没有指向旧位置的指针0x7256AC7D
,也无法到达delete
该位置。所以你正在泄漏内存。
在其他注释中,使用 C++11 更好或更容易std::shared_ptr
避免std::unique_ptr
这种泄漏。