我认为VC++编译器为每个类提供'delete'操作符的定义,如果它不是程序员提供的。任何人都可以确认吗?如果未定义,VC++为每个类提供默认的“删除”操作符
在VC++中生成的dis汇编代码说,每个类都有一个通用的'new'运算符。但是,每个类都存在“删除”操作符。这里是证据:
delete bPtr;
// The dis assembly code generated by vc++ for above line
....
**call Base::`scalar deleting destructor' (411253h)**
....
delete [] bPtrArr;
// The dis assembly code generated by vc++ for above line
....
**call Base::`vector deleting destructor' (41125Dh)**
....
调用堆栈:
malloc.exe!Base::~Base() Line 128
malloc.exe!Base::`scalar deleting destructor'() + 0x2b bytes
malloc.exe!wmain(int argc=0x00000001, wchar_t * * argv=0x00343250) Line 173 + 0x2b bytes
malloc.exe!__tmainCRTStartup() Line 579 + 0x19 bytes
malloc.exe!wmainCRTStartup() Line 399
是的,这是正确的。 – 2012-03-28 13:37:00
@Dew你应该小心摆出问题。我相信你的意思是新的和删除小写。但是,它总是要更具体,并且在语义上与句子用法一致,在语法上是正确的。 – Invictus 2012-03-28 13:53:02
编辑中的代码不是每个类的“删除”的证据。它只是表明对于数组,标量的'delete'和'delete []'是有区别的。这是合理的和预期的。 – Blastfurnace 2012-03-28 15:42:17