【发布时间】:2017-01-10 00:41:36
【问题描述】:
在我对C++内存模型的理解中,只有当对象数组被new[]创建,被'delete[]'删除时,才会使用标量构造函数/析构函数,编译器会生成一个内部for循环来迭代每个元素位置。
int main()
{
B obj;
B* pb = new B;//no scalar constructor
delete pb;//scalar deleting destructor
}
但是我发现当我使用'new''delete'只操作一个元素,而不使用'[]'时,VC仍然会为调试版本生成'scalar delete descturctor'的代码。
所以我的问题是:
- 标量构造函数/析构函数不必成对出现,对吗?在我的测试程序中,我发现只有标量删除析构函数。
- new 或 new[] 创建的所有对象都应该有一个标量删除析构函数吗?为什么一个元素仍然有这个考虑,我认为一个元素的情况没有必要处理异常,堆栈展开,这应该依赖于额外的删除析构函数。有什么原因吗?
【问题讨论】:
标签: c++ heap-memory destructor scalar