문제

인터넷 검색 중에 이 게시물 , 여기 포함 <인용구>

"(잘 쓰여짐) C ++는 훌륭합니다. 스택을 자동으로 만드는 길이 객체는 프리미티브와 "똑같이"작동합니다. Stroustrup의 조언에 반영된대로 "int가하는 것처럼".이것은 훨씬 더 많은 준수 객체 지향 원칙 개발 : 수업이 옳지 않습니다 int처럼 작동 할 때까지 "3의 규칙"에 따라 (정수처럼) 할 수 있음을 보장합니다. 생성, 복사 및 올바르게 자동으로 스택으로 파괴됩니다. "

저는 약간의 C와 C ++ 코드를 해봤지만, 그냥지나 가면서 심각한 것은 없습니다.하지만 저는 단지 궁금합니다. 정확히 무엇을 의미합니까?

누군가가 예를 들어 줄 수 있습니까?

도움이 되었습니까?

해결책

스택 객체는 컴파일러에 의해 자동으로 처리됩니다.

범위가 남아 있으면 삭제됩니다. 라코 디스

'newed'객체로 동일한 작업을 수행하면 메모리 누수가 발생합니다. 라코 디스

b는 파괴되지 않았으므로 b가 소유 한 메모리를 회수 할 수있는 능력을 잃었습니다.더 나쁜 것은 개체가 스스로 정리할 수 없다는 것입니다.

C에서는 다음이 일반적입니다. 라코 디스

C ++에서는 다음과 같이 작성합니다. 라코 디스

C 샘플에서 fclose를 호출하는 것을 잊었을 때 파일은 닫히지 않으며 다른 프로그램에서 사용할 수 없습니다.(예 : 삭제할 수 없습니다.)

구성, 할당 및 범위 종료시 소멸되는 객체 문자열을 보여주는 또 다른 예입니다. 라코 디스

다른 팁

다른 답변 외에도 :

C ++ 언어에는 실제로 객체의 스토리지 클래스를 명시 적으로 선언하는 auto 키워드가 있습니다.물론 이것은 지역 변수에 대한 묵시적 저장 클래스이고 어디에서나 사용할 수 없기 때문에 완전히 필요하지 않습니다.auto의 반대는 static (로컬 및 전역)입니다.

다음 두 선언은 동일합니다. 라코 디스

키워드는 완전히 쓸모가 없기 때문에 실제로 다음 C ++ 표준 (“C ++ 0x”)에서 재활용되고 새로운 의미를 갖게됩니다. 즉, 컴파일러가 초기화에서 변수 유형을 유추 할 수 있도록합니다 (예 : varC #) : 라코 디스

C ++의 변수는 스택이나 힙에서 선언 할 수 있습니다.C ++에서 변수를 선언하면 명시 적으로 new 연산자를 사용하지 않는 한 자동으로 스택으로 이동합니다 (힙으로 이동). 라코 디스

이는 메모리 관리 방식에 큰 차이를 만듭니다.스택에서 변수가 선언되면 범위를 벗어나면 할당이 해제됩니다.힙의 변수는 객체에서 명시 적으로 delete를 호출 할 때까지 삭제되지 않습니다.

자동 스택은 현재 메소드의 스택에 할당 된 변수입니다.스택 자동으로 작동 할 수있는 클래스를 디자인하는이면의 아이디어는 한 번의 호출로 완전히 초기화하고 다른 호출로 파괴 할 수 있어야한다는 것입니다.소멸자가 객체에 의해 할당 된 모든 리소스를 해제하고 생성자가 완전히 초기화되고 사용할 준비가 된 객체를 반환하는 것이 필수적입니다.복사 작업과 유사하게-클래스는 완전히 기능적이고 독립적 인 복사본을 쉽게 만들 수 있어야합니다.

이러한 클래스의 사용법은 기본 int, float 등이 사용되는 방식과 유사해야합니다.당신은 그것들을 정의하고 (결국 그들에게 초기 값을 부여) 그것들을 전달하고 결국 컴파일러를 청소에 맡깁니다.

내가 틀렸다면 수정하지만 자동 스택 정리를 최대한 활용하기 위해 복사 작업이 필수는 아니라고 생각합니다. 예를 들어 고전적인 MutexGuard 객체를 생각해 보면 자동 스택으로 유용하기 위해 복사 작업이 필요하지 않습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top