由delete void* 想到的
时间:2010-05-19 来源:liuyun213
由delete void* 想到的
发现自己对delete void* 还不是很熟悉,知道不应该这么做,于是google之,先将结果记录如下
delete void* 对于单纯的类型(基本类型)来说,没什么问题,无非就是释放空间而已
而对于自定义类型来说(主要是class),不会调用实际类型的析构函数,有可能造成资源泄漏
在delete T* 时,会先调用类型 T 的析构函数,然后再释放空间,而delete void* 类型是缺少了调用析构函数这一步。
相应地,在new T 时,会先分配空间,然后再调用对应的构造函数。 在C语言里,堆空间的使用时通过malloc/free等函数实现的,它们操作的都是无类型的,接void*的
在C++里面,一般使用new/delete操作符。new/delete操作符是类型化的操作,即都指明了类型,如:
T* pT = new T();
delete pt; 在C++里,也有只分配空间不调用对应构造函数的操作:
1、operator new 和operator delete
2、class allocator
对于它们用法还不是很熟悉,以后再说了
而对于自定义类型来说(主要是class),不会调用实际类型的析构函数,有可能造成资源泄漏
在delete T* 时,会先调用类型 T 的析构函数,然后再释放空间,而delete void* 类型是缺少了调用析构函数这一步。
相应地,在new T 时,会先分配空间,然后再调用对应的构造函数。 在C语言里,堆空间的使用时通过malloc/free等函数实现的,它们操作的都是无类型的,接void*的
在C++里面,一般使用new/delete操作符。new/delete操作符是类型化的操作,即都指明了类型,如:
T* pT = new T();
delete pt; 在C++里,也有只分配空间不调用对应构造函数的操作:
1、operator new 和operator delete
2、class allocator
对于它们用法还不是很熟悉,以后再说了
相关阅读 更多 +