void f(const Fraction& a)
{ Fraction b = a;
Fraction* c = new Fraction(3, 4);
Fraction* d = &a;
Fraction* e = new Fraction(7, 8);
Fraction* f = c;
delete f;
}谢谢,
发布于 2013-04-22 11:14:08
您可能缺少的关键洞察力是,delete与特定变量没有任何关系--它与存储在特定内存地址的特定对象有关系。通常的规则是:“使用new分配的任何对象都必须用delete来释放。”但是请注意对象这个词的用法-不是变量。
考虑:
Fraction* a = new Fraction(3,4);
Fraction* b = a;
delete b;在本例中,我们删除了b,它指向第一行中分配的Fraction对象。我们也可以删除a,它指向同一个Fraction对象。只要我们删除分配给的每个new对象(不管我们使用哪个指针变量访问对象),就不会有内存泄漏。还请注意,如果我们同时删除a和b,那么就会有一个错误(通过double-delete未定义的行为)。
发布于 2013-04-22 11:09:09
您应该删除c (或f),但不能同时删除两者,并且应该删除e。对于每个new,应该是delete。
发布于 2013-04-22 11:08:19
new Fraction(3, 4);创建的对象e或更严格地说,使用new Fraction(7, 8);分配的内存不会被释放,从而导致内存泄漏。https://stackoverflow.com/questions/16145638
复制相似问题