動的に割り当てられ、ヒープを使用しているメモリは、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:「new」を使用せずに解決しました。T