2016-11-16 11 views
0

私は関数呼び出しの後、すべてのrvalueパラメータsend to関数は破棄されます。私はこの例を完全に駄目です。誰かがそれで私を助けることができますか?それが説明したリンクかもしれない。関数のパラメータの寿命

class Test 
{ 
public: 
    Test(const char* name) 
     : ptr(nullptr) 
    { 
     ptr = name; 
    } 

    ~Test() 
    { 
     printf("%s\n", ptr); 
     system("PAUSE"); 
    } 

    const char* ptr; 
}; 

int main() 
{ 
    Test t("Hello"); 
} 
+0

あなたの問題が本当に分かりません。そして、これはcではありません –

+0

要するに、関数呼び出しが終了すると同時に引数の存続期間が終了します。 – Sean83

+0

どのような出力を期待していますか?プロバイブルとは何ですか? –

答えて

5

"Hello"は文字列リテラルです。文字列は、静的な存続期間を持つ基本値です。 42と同じ:その番号は決して破壊されません。他のニュースで


:nullにptrを初期化

  • 、後でそれに割り当てるナノ秒は、厄介であるため、いくつかのプログラマの時間を無駄にすることができます。必要な値に初期化するだけです。

  • 最後にプログラムを一時停止することは目的がなく、実用的な問題になる可能性があります。いくつかのIDEからプログラムを実行するときにプログラムの出力を見るには、適切な方法で実行してください。例えば。 Ctrl + Visual StudioのF5

  • 一般に、データメンバーには特別な命名規則を採用することをお勧めします。例えば、ptr_、またはmy_ptr、またはmyPtr、またはmPtr(私が最初に好む)。しかし、初心者の中には、CとC++実装のグローバル名を分離するために使用される規約との競合があるため、_ptrを使用しないでください。

+0

ありがとう、基本的な値の静的寿命を知りませんでした。 –