0

const char * strがあり、それを単純な文字列に変換したかったので、std :: string()コンストラクターを使用して、strの値を変数にコピーしました。

    const char* str;
    std::string newStr = std::string(str);

    <some processing>...
    <end>

したがって、関数が終了する前に、文字列newStrを削除する必要がありますか、std :: stringクラスのデストラクタが自動的に呼び出され、このnewStrが削除されます。std :: stringクラスのデストラクタが仮想ではないことをここで読んでいると、混乱します。ただし、ここでは、文字列がスコープ外になると削除されることを示しています。デストラクタが仮想でない場合は混乱するように思われるので、誰かがそれに光を当てることはできますか?文字列変数がスコープ外になった後に削除されるのはなぜですか?

4

2 に答える 2

4

を削除する必要はありませんnewStr自動ストレージがあるため、スコープ外になるとデストラクタが呼び出されます。これは、デストラクタが仮想であることとはまったく関係ありません。

于 2012-10-29T19:47:17.910 に答える
0

new キーワードを使用してオブジェクトを作成しなかったため、オブジェクトはスタック上に作成され、変数がスコープ外になると destruct-or が自動的に呼び出されます。ただし、 new キーワードを使用してオブジェクトを作成すると、オブジェクトはヒープ上に作成されます。これは C++ の一般的な規則です。

于 2012-10-29T19:50:37.023 に答える