struct Set
{
int a;
Set() : a(30){};
bool operator>( const Set& ref ) const
{
return ref.a > this->a;
};
};
int _tmain(int argc, _TCHAR* argv[])
{
vector<Set>m_set;
m_set.push_back( (*(new Set)) );
cout << m_set.at(0).a;
delete &(m_set.at(0));
if( &(m_set.at(0).a) )
cout << "valid" << endl;
return 0;
}
为什么输出valid
,使用此方法删除无效?
答案 0 :(得分:3)
当您访问已删除的对象时,行为未定义。任何事情都可能发生。
编辑:而且,更重要的是,当您删除未使用new创建的对象时,行为未定义。任何事情都可能发生。这就是这里的代码。
答案 1 :(得分:1)
您永远不会有指向 分配的对象的引用或指针。向量将生成对象的副本,但您已经丢失了原始对象本身的所有轨迹,因此无法恢复或删除它。
您需要执行以下操作之一:
T * p = new T;
delete p;
T & r = *new T;
delete &r;
不要使用第二个版本。