2009-06-15 3 views
-3

Q1. 다음 코드 줄에서는 메모리 할당 또는 생성자 호출이 먼저 발생합니다.C++ 할당, 건설 및 파기 질문

int *ptr = new int(); 

질문 2. 개체를 삭제하는 다음 세 가지 방법의 차이점은 무엇입니까?

  1. DELETE 연산자로 개체가 파괴 된 경우; 소멸자가 호출 되었습니까?
  2. 소멸자가 명시 적으로 (예 : a1.~A()) 개체를 파괴하기 위해 호출 된 경우?
  3. 개체가 범위를 벗어납니다 (즉, 명시 적 소멸자 호출도 아니고 DELETE 연산자도 사용되지 않음).

소멸자가 비공개이거나 보호 된 경우의 동작은 무엇입니까?

+7

이 제목에 의미있는 제목을 지정하고 서로 관련이없는 경우 2 개의 개별 질문을하십시오. –

+0

Evan이 말했듯이 다른 사람들에게 도움이되도록 질문의 형식을 지정하십시오. 두 가지 질문이 있으면 따로 질문하고 각 질문에 의미있는 제목을 부여하십시오. 그렇게하면 다음에 다른 사람이 같은 문제를 겪을 때, 그들은 귀하의 질문을 검색하고 찾을 수 있습니다. – jalf

+2

나는 2 가지 의문점을 가지고 있습니다. 하나는 숙제 문제가 아니며 다른 하나는 누군가 당신을 위해 그것을 할 것이라는 것입니다. –

답변

3

좋아, 글쎄, 나는 당신의 질문에 약간 의미있는 칭호를 주었고, 나는 또한 그들에게 대답하려고 노력할 것이다. (실제로 여러 게시물에 여러 질문을 넣어야 함).

. 할당이 먼저 발생합니다. 이것은 객체가 이 할당 될 때까지이 존재하지 않기 때문에 분명합니다. 그런 다음에 만 생성자를 실행하고 개체에 값을 제공 할 수 있습니다.

Q2.

1. If an object is destroyed with DELETE operator. Will destructor be called? 

예.

2. If a destructor is called explicitly (e.g. a1.~A()) to destroy the object? 

여기에 진짜 질문은 없습니다.

3. Neither explicit destructor call is made nor DELETE operator is used to destroy the object but object goes out of scope. 

이 질문은 모호합니다. 그것의 삭제 측면은 객체가 힙에 할당되었다는 것을 의미합니다.이 경우 범위를 벗어나지 않습니다 ... 그러나 객체 에 대한 포인터는이 범위를 벗어날 수 있습니다. 이것이 당신이 말하는 내용이라면, 당신은 메모리 누출이 있습니다.

그러나 할당 된 객체 스택에 대해 이야기하는 경우 소멸자는 범위를 벗어날 때 호출됩니다.