2016-11-16 5 views
0

이지만 함수 호출 후 모든 rvalue 매개 변수가 함수로 보내지지만 파손됩니다. 이 예제를 완전히 망 쳤어. 누군가 그것을 도와 줄 수 있습니까? 어쩌면 그것이 설명하는 일부 링크.함수 매개 변수 수명이

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

나는 정말로 당신의 문제가 무엇인지 이해하지 못합니다. 그리고 이것은 없습니다. –

+0

간단히 말해서, 함수 호출이 끝나는 동시에 인수의 수명이 끝납니다. – Sean83

+0

예상되는 출력은 무엇입니까? 그 가설은 무엇입니까? –

답변

5

"Hello"은 문자열 리터럴입니다. 문자열은 정적 수명이있는 기본 값입니다. 42과 동일 : 그 번호는 절대로 파괴되지 않습니다. 다른 뉴스에서


:

  • null로 ptr를 초기화하고, 나노초 나중에에 할당 곤혹이므로 일부 프로그래머의 시간을 낭비 할 수 있습니다. 그냥 있어야하는 값으로 초기화하십시오.

  • 끝에 프로그램을 일시 중지하는 것은 목적이 없으므로 실용적인 문제 일 수 있습니다. 일부 IDE에서 실행할 때 프로그램의 출력을 보려면 적절한 방법으로 실행하십시오. 예 : + Visual Studio의 F5

  • 일반적으로 데이터 멤버에 대해 특별한 명명 규칙을 적용하는 것이 좋습니다. 예 : ptr_ 또는 my_ptr 또는 myPtr 또는 mPtr (먼저 선호). 그러나 일부 초보자가 그렇듯이 _ptr을 사용하지 마십시오. C 및 C++ 구현 전역 이름을 분리하는 데 사용되는 규칙과 충돌하기 때문입니다.

+0

고마워, 기본 값 정적 수명을 몰랐어요. –