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

时间:2016-07-14 03:40:16

标签: 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;

1 个答案:

答案 0 :(得分:2)

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

在其他说明中,使用C ++ 11中的std::shared_ptrstd::unique_ptr可以更好或更轻松地避免此类泄漏。