在重新分配指针之前,是否需要调用 delete

Do I need to call delete before reassigning a pointer?

本文关键字:是否 delete 调用 指针 新分配 分配      更新时间:2023-10-16

以下哪项是避免内存泄漏的正确方法?

//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;

选项 A 中有明确的内存泄漏。假设您已在某个内存位置0x7256AC7Dnew char[4]; 分配了内存,并且data指向此位置。然后,在不删除此位置的情况下,您已经为new char[5];分配了另一个内存位置,并将data指向此新位置。现在,您没有指向旧位置0x7256AC7D的指针,也无法delete。所以你正在泄露那段记忆。

在其他笔记中,最好或更容易使用C++11 std::shared_ptrstd::unique_ptr以避免这种泄漏。