战魂小筑

讨论群:309800774 知乎关注:http://zhihu.com/people/sunicdavy 开源项目:https://github.com/davyxu

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  257 随笔 :: 0 文章 :: 506 评论 :: 0 Trackbacks

    C++中使用delete进行单个对象的析构及内存删除,使用delete[]进行对象数组的析构及内存删除

    记得某次友人层说过,delete[]在Windows平台上都是用HeapFree来实现的,因此delete[]和delete来删除对象数组时都是一样的。之后我也参考过很多的内存管理器及new/delete重载实现,基本都是这个道理。

    最近突然发现,如果是对象数组的话,使用delete确实能删除内存,但是对象数组中的每个对象的析构就不能被调用了。幸好平时一直都还是保持良好的C++习惯,一直使用delete[],并且使用new[]大部分是char类型,不需要析构

posted on 2009-08-20 18:22 战魂小筑 阅读(867) 评论(3)  编辑 收藏 引用 所属分类: 程序调试技术C++/ 编程语言

评论

# re: 对C++ delete[] 一直忽略的问题[未登录] 2009-08-20 19:43 missdeer
这点在《尝试探索C++对象模型》中有说,对于基本数据类型,两者等价,对于自定义类型,则delete只能调用数组第一个元素的析构函数。  回复  更多评论
  

# re: 对C++ delete[] 一直忽略的问题 2009-08-21 11:29 HIT@ME
不会吧。你们说的是这个意思么?
VS2008:

class testdel
{
public:
testdel()
{
std::cout<<"constructor"<<std::endl;
}
~testdel()
{
std::cout<<"destructor"<<std::endl;
}
};

void main()
{
testdel *p = new testdel[4];
delete [] p;
}

构造和析构都输出4次啊~  回复  更多评论
  

# re: 对C++ delete[] 一直忽略的问题[未登录] 2009-08-22 09:09 missdeer
嗯, 就是说的这个,不信你把最后一行delete[] p改成delete p,就只会析构一次了。  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理