我知道已经动态分配并使用堆的内存需要使用 delete 手动删除。如果在超出范围的类函数中创建动态对象也是这种情况吗?这是一个片段。
Fraction* Fraction::add(const Fraction* fr) const{
int gcd;
Fraction* temp;
gcd = gcdRecur(num * fr->denom + fr->num * denom,
denom * fr->denom);
temp = new Fraction((num * fr->denom + fr->num * denom) / gcd,
(denom * fr->denom) / gcd);
return temp;
}
在这种情况下, temp 是指向使用“new”的 Fraction 类型的动态对象的指针(对吗?)。如果我将此指针返回到调用类函数“add”的位置,是否需要删除本地指针“temp”?如果是这样,我该如何做到这一点?
编辑:我对在此类成员中使用 new 的(错误)解释是因为 Fraction 对象正在通过指向 Fractions 的指针进行实例化(如下所示):
int main() {
menu()
return 0;
}
void menu() {
Fraction* fr1 = 0;
Fraction* fr2 = 0;
Fraction* fr3 = 0;
// ... user chooses to initialize, so fr1, fr2, fr3 no longer null
// ... user chooses to add. call submenu, pass fr1, fr2, fr3 by POINTERS?
addMenu(fr1, fr2, &fr3);
}
看起来很糟糕......这是 addMenu 的标题:
void addMenu(const FractionTeddyD*, const FractionTeddyD*, FractionTeddyD**);
编辑#2:在不使用“新”的情况下解决。吨