为什么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]