cdsfiui 发表于 2016-09-02 09:56

为什么VC生成的代码对于new单个元素的情况,delete也有一个scalar destructor?

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

        int main()
        {
                B obj;
                B* pb = new B;//no scalar constructor
                delete pb;//scalar deleting destructor
        }

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

还请高人解释一下。

页: [1]
查看完整版本: 为什么VC生成的代码对于new单个元素的情况,delete也有一个scalar destructor?