2016-11-16 13 views
0

私はC++が初めてで、プログラムの実行方法を学習しています。私はこのコードに取り組んでいます:C++デバッグ戻り値0を変数に戻す

#include <iostream> 
#include <string> 

using namespace std; 

void sayHello() { 
    cout << "Hello world!" << endl; 
} 

void greet(string name) { 
    cout << "Hello " << name << ", how are you?" << endl; 
} 

int main() 
{ 
    sayHello(); 
    int a = 10; 
    string name = "Johan"; 
    greet(name); 
    return 0; 
} 

私はコードブロックIDEでこのコードをデバッグしました。 return 0ステートメントに達すると、黄色の矢印(ステップインモード)がstring nameステートメントに戻り、デバッグを終了するためにreturnステートメントに再度行きました。私はそれがメモリを解放することに関連していると思ったが、なぜそれはint a = 10に行かなかったのだろうか?

正常ですか?デバッガは何をしましたか?デバッガは閉じ括弧に直接移動すべきではありませんか?

ありがとうございました。

答えて

1

std::stringはデフオルトでないデストラクタを持つクラスです。これは、デストラクタを呼び出すことによって、このstd::stringオブジェクトを破棄しようとしていることをデバッガに伝える方法です。デバッガはこう言います。「大丈夫です。私は今戻りステートメントを実行しています。ビジネスの最初の順序はこのstd::stringを破棄することです。このstd::stringオブジェクトを宣言した行にジャンプします。私はこのデストラクタを実行しようとしています;今、そこでは、私はそれをやった、今私はこの関数から戻るプロセスを再開します "。

プレーンintにはファンシーシャンシーデストラクタはありません。特別な操作は必要ありません。

+0

非常に明確な説明、ありがとう – kuntoro