Chinaunix

标题: 为什么VC生成的代码对于new单个元素的情况,delete也有一个scalar destructor? [打印本页]

作者: cdsfiui    时间: 2016-09-02 09:56
标题: 为什么VC生成的代码对于new单个元素的情况,delete也有一个scalar destructor?
我对于C++内存模型的理解是,如果在堆上创建多个元素,那么new[]和delete[]会对应编译器生成一对隐藏函数,分别作了for循环来初始化new出来的每个元素和析构每个元素。但是我发现我即使new一个对象,VC的debug版也生成了一个scalar deleting destructor,调试的时候可以F11找到其调用栈。

  1.         int main()
  2.         {
  3.                 B obj;
  4.                 B* pb = new B;//no scalar constructor
  5.                 delete pb;//scalar deleting destructor
  6.         }
复制代码

我的问题是:
1. scalar constructor/destructor 需不需要成对出现? 我在调试的过程中,上面代码的调用栈没有发现有scalar constructor,只有scalar deleting destructor.
2. 所有在堆上创建的对象,都要用scalar deleting destructor来销毁吗? 对于一个元素的情况,即使需要异常处理和回滚,似乎也不需要引入这个一个scalar deleting destructor吧?

还请高人解释一下。






欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2