2016-07-30 1 views
1

아래의 프로그램 코드를 살펴보십시오. 나는 그것이 문제가되는 것이 무엇인지 명확하게하기 위해 많은 의견을 들었다.다음과 같이 할당 된 메모리를 어떻게 할당 해제합니까? A ​​& o = * (new A)?

#include <iostream> 

class A { 
    public: 
     void test() { 
      std::cout << "foo" << std::endl; 
     } 
}; 

int main() { 
    A& o = *(new A); // The memory for object "o" is allocated on the heap. 
    o.test();  // This prints out the string "foo" on the screen. 
        // So far so good. 

    // But how do I now deallocate the memory used by "o"? Obviously, 
    // memory has been allocated, but I know of no way to relinquish it 
    // back to the operating system. 

    // delete o;  // Error: type ‘class A’ argument given to ‘delete’, 
        // expected pointer 


    return 0; 
} 
+1

'A o;'로'new'를 피하십시오. – Jarod42

답변

9

이 줄은

A& o = *(new A); 

그것을 변경 고려 이상한입니다. 포인터를 선언하는 것의 이점은 보이지 않는다. A* o = new A();.


당신은 메모리 할당을 해제하려면 : 당신이 정의했다면 o

A o = *(new A); 

당신이 메모리를 할당 해제의 방법이 없다는 것

delete &o; //Deletes the memory of 'o' 

참고 때문에 oA의 복사본입니다 (완전히 새로운 주소!). o이 스택에서 생성되었으므로 delete &o;은 정의되지 않은 동작을 초래합니다.

관련 문제