5

はじめに:いくつかの作業を行い、bool を返す関数を取得しました。エラーが発生した場合、bool は false になります。したがって、エラーをチェックしたい場合は、bool を使用できます。しかし、私が完全に確信している場合(完全に確信することはできませんが、私の言いたいことを理解しているかもしれません)、この部分にエラーがないか、エラーがあるかどうかは気にしないでください。影響。

質問:返された bool を「キャッチ」しないと、メモリ リークやその他のパフォーマンスの問題が発生しますか?

最小コード例:

bool my_func(/*some variables*/)
{
    if(/*error-condition*/)
    {
        //do something
        return false;
    }
    else if(/*other error-condition*/)
    {
        //do something
        return false;
    }
    return true;
}


int main(void)
{
    my_func(/*variables*/);
    return 0;
}

コメント:コンパイル エラー、実行時エラー、未処理の例外は返されません。

4

6 に答える 6

16

関数内から割り当てられ、その関数内で解放されていないメモリへのポインターでない場合は、関数の戻り値を安全に無視できます。

于 2013-09-23T13:55:24.787 に答える
6

C++ では、メモリは動的ストレージ期間を持つオブジェクト、つまりneworで割り当てられたオブジェクトstd::malloc(cmp. C++11 3.7.4/1)に対してのみリークする可能性があります。

関数内のboolは一時的なものになります。つまり、自動保存期間があるため (cmp. C++11 3.7.3/1)、それを無視しても問題ありません。

于 2013-09-23T13:58:36.143 に答える
6

関数の戻り値は、関数が消費して解放していないリソースに関する情報を示さない限り、常に無視できます。例えば

1) 関数によって割り当てられたメモリへのポインターまたはポインターを含む構造体

2) 関数によって開かれたファイル/ストリーム バッファへのポインタまたはポインタを含む構造体

戻り値を無視することを選択する前に、常に関数のドキュメントを確認する必要があります。

于 2013-09-23T13:59:52.607 に答える
2

いいえ、パフォーマンスの低下やメモリ リークは発生しません。ただし、一般に、例外は C++ でエラーを処理する適切な方法です。

于 2013-09-23T13:57:15.907 に答える
2

いいえ、これは void ステートメントです。bool は破棄されます

于 2013-09-23T13:57:31.583 に答える
1

戻り値は使用されないため、無視してかまいません。これは単なる void ステートメントであり、コードを記述し2;たりidentifiername;、コード内に記述したりするのとまったく同じです。

呼び出されますが、値を保存していないため、他に何も起こりません。

于 2013-09-23T13:57:26.203 に答える