关于析构函数以及定位new表达式的一些问题
class Account
{
public:
Account()
: _name( "default" ), _balance( 0.0 ), _acct_nmbr( 0 )
{}
Account(const char* name)
: _balance( 0.0 ), _acct_nmbr( 0 )
{
_name = new char[ strlen(name) + 1 ];
}
// 在析构函数中使用了delete
~Account(){ delete [] _name; }
private:
char *_name;
double _balance;
int _acct_nmbr;
};
char *arena = new char[ sizeof(Account) ];
int main()
{
Account *ptr = new(arena) Account( "Quasimodo" );
// 1、为什么析构函数中的delete操作符没有把底层的堆存储区也删除了?
ptr->~Account();
// 2、为什么下面的表达式没有删除堆存储区?
delete [] arena;
Account *pts = new(arena) Account( "Esmerelda" );
system( "PAUSE" );
return 0;
}
关于第一个问题,我想既然ptr被赋值为与arena相关联的地址,那么析构函数中的
delete操作符在删除ptr->_name的同时也就是把堆存储区删除了,不知道这样理解
的对不对?
第二个问题,delete [] arena好像没有起作用,按理说,删除后给arena分配的存储
区已经不存在了,用pts指向它应该会出错,可却没有,是编译器的问题吗?我用了
Dev C++和VC 7.0,结果pts还是能指向arena分配的存储区(应该不存在了啊)!!!