在重新分配指针之前,是否需要调用 delete
Do I need to call delete before reassigning a pointer?
以下哪项是避免内存泄漏的正确方法?
//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 中有明确的内存泄漏。假设您已在某个内存位置0x7256AC7D
为 new char[4];
分配了内存,并且data
指向此位置。然后,在不删除此位置的情况下,您已经为new char[5];
分配了另一个内存位置,并将data
指向此新位置。现在,您没有指向旧位置0x7256AC7D
的指针,也无法delete
。所以你正在泄露那段记忆。
在其他笔记中,最好或更容易使用C++11 std::shared_ptr
或std::unique_ptr
以避免这种泄漏。
相关文章:
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- 析构函数是否会自动调用 delete[] C++?
- 如果我为一个类编写new和delete运算符,我是否必须编写它们的所有重载
- c++ 运算符 new[]/delete [] 是否调用运算符 new/delete?
- 如果"somethings"不需要访问"this",那么在"delete this"后做某事是否安全?
- 我是否正确使用了delete[]运算符
- C++ 是否可以从数组中'delete'元素?
- 如果我对对象调用 delete,矢量中的对象指针是否被删除
- 将 delete 作为运算符或函数调用是否有任何区别
- 是否可以"delete"分配"new[1]"的内存,反之亦然?
- 是否可以对全局运算符“new”和“delete”执行回调
- 在 Linux 上混合使用"new[]"和"delete"是否"safe"?
- 是否有可能在c++中调用delete时阻止析构函数运行?
- "delete"多态性是否正常工作?
- delete(非数组形式)是否知道new或new[]分配的内存总量
- 是否存在一个尊重重写的new/delete的C++分配器
- c++ 14是否要求delete表达式必须调用' void operator::delete(void*, std::
- 对运算符的调用是否'delete'同步的?
- delete[]操作符是否适用于通过指针返回的动态分配的内存?
- 我是否应该将所有对new/delete的调用集中到一个类