在重新分配指针之前我需要调用delete吗?

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)

tas*_*oor 5

选项 A 中存在明显的内存泄漏。假设您已new char[4];在某个内存位置分配了内存0x7256AC7Ddata指向该位置。然后,在不删除它的情况下,您已经分配了另一个内存位置new char[5];data指向这个新位置。现在您没有指向旧位置的指针0x7256AC7D,也无法到达delete该位置。所以你正在泄漏内存。

在其他注释中,使用 C++11 更好或更容易std::shared_ptr避免std::unique_ptr这种泄漏。