(转载)警惕“delete void*”
2013-05-04 00:41
183 查看
对一个void*类型指针进行delete操作会出错,除非指针所指的内容是简单类型内容,因为这个操作只会释放内存,而不会执行析构函数
下面是一个代码示例:
//:BadVoidPointerDeletion.cpp #include <iostream> using namespace std; class Object { void* data; // Some storage const int size; const char id; public: Object(int sz, char c) : size(sz), id(c) { data = new char[size]; cout << "Constructing object " << id << ", size = " << size << endl; } ~Object() { cout << "Destructing object " << id << endl; delete []data; // OK, just releases storage, // no destructor calls are necessary } }; int main() { Object* a = new Object(40, 'a'); delete a; void* b = new Object(40, 'b'); delete b; //会释放Object对象的内存,但不会释放data所指向的内存,即不会执行析构函数 }
运行结果:
Constructing object a, size = 40
Destructing object a
Constructing object b, size = 40
如果在程序中发现了内存丢失,应该搜索所有的delete语句并检查被删除指针的类型,
如果是void*类型,则可能发现了引起内存丢失的某个原因。
相关文章推荐
- 警惕“delete void*”
- 黑马学习笔记——public void Delete<T>(List<T> EntityList) where T : class, new() 的用法
- 数据库开发——参照完整性——在外键中使用Delete on cascade选项(转载)
- c++中new和delete的使用方法(转载)
- 〔转载〕警惕IBM挖坑埋人(再续)
- 堆区,栈区,new/delete/malloc/free(转载)
- c++中new和delete的使用方法(转载)
- a标签中的href,onclick,#,javascript:void简要分析 (转载)
- delete一个void*可能会造成泄漏内存
- 在类的成员函数中调用delete this(转载从东郭先生)
- delete void *
- 转载:浅谈 C++ 中的 new/delete 和 new[]/delete[]
- 《转载》GET,POST,PUT,DELETE的区别
- 【转载】C/C++语言void及void指针深层探索
- error LNK2005: "void __cdecl operator delete类似问题解决办法
- js void delete + -运算符
- [转载]警惕UNIX下的LD_PRELOAD环境变量
- 警惕最新互联网碰瓷:转载文章都是起诉对象
- 转载--void指针(void *的用法)
- Self-Delete程序之Delphi版本,终于搞定了。 (转载)