2016-08-30 6 views
0

나는 코드를 쓰고 있어요 그리고 난 참조 &에 대한 질문이 :이 경우C++ 참조 및 메모리

class A{ 
    private: 
      int num; 
    public: 
      void set(const int& a){num = a;} 
      void foo(){ 
        int a = 4; 
        set(a); 
      } 
      void print(){ 
        cout << num << endl; 
      } 

}; 
int main(){ 
    A a; 
    a.foo(); 
    a.print(); 
    return 0; 
} 

변수 afoo()의 말에 파괴됩니다. set을 참조하십시오. 따라서 주소는 a이고 업데이트는 num입니다. 따라서이 코드가 잘못 되었습니까 (num은 삭제 된 메모리를 나타냅니다)? 아니면 set, 값이 (주소가 아님)으로 num을 설정하고?

나는 anum의 주소의 cout와 코드를 편집하고 서로 다른, 그래서 내 생각 NUM 복사 a. 코드를 실행하면 모두 작동하는 것처럼 보이지만 확실하지 않습니다.

+4

'num = a;'는 복사본을 취합니다. 특별한 것은 없습니다. _ "num은 삭제 된 메모리를 가리 킵니다."_ num은 메모리를 가리키지 않으며 일반 클래스 멤버 변수입니다. –

+0

그 주소의 복사본이 아닙니다. – linofex

+0

_ "주소가 아니라 a의 값인 사본입니다."_ 물론입니다. –

답변

2

코드 num = a에 a가 ​​들어 있기 때문에 코드가 유효하지 않습니다. 또한 set()은 개체 메모리가 반환되기 전에 모든 사람이 복사본을 가지고 있으므로 무효가 발생하지 않도록 호출됩니다. 또한 클래스의 인스턴스가 지속되는 동안 num이 지속되므로 삭제 된 메모리에 대해 걱정할 필요가 없습니다.

+0

주소가 아닌 a의 값을 복사 하시겠습니까? – linofex

+1

@linofex 지구상에 주소가 복사되는 이유는 무엇입니까? –

+0

아니요, 주소가 복사되지 않습니다. 포인터가 아닙니다. 두 객체가 동일한 주소를 참조하는 경우의 예는 클래스가 new로 할당 된 포인터 멤버를 가지며 복사 구성/할당이 정의되지 않은 경우입니다. –