2010-12-06 5 views
0

나는 OOP에 익숙하지 않지만 변수가 전체 객체 (C++, java 및 PHP 에서처럼)를 가질 수없는 이유를 결코 이해하지 못했습니다. 그렇다면 항상 포인터로 작업하는 것이 일반적으로 어떤 이점이 있습니까? 변수가 개체 자체가 아닌 개체에 대한 참조를 저장하는 이유는 무엇입니까?

+4

C++ *의 변수는 전체 개체를 포함 할 수 있습니다. Java의 변수는 사용할 수 없습니다. C#의 변수는 클래스가 'System.ValueType'에서 상속 한 경우에만 객체를 보유 할 수 있습니다. – cdhowie

답변

1

자동 대 수동 메모리 관리가 적용됩니다. Java와 .NET과 같은 플랫폼은 garbage collector을 구현하는 가상 머신 위에서 실행됩니다. 이것은 자동으로 메모리의 할당과 파괴를 관리합니다. 이 시스템에서 모든 변수는 단일 Object 유형의 단일 변수에서 파생됩니다.

C++ 을 사용하면 스택에 객체 인스턴스를 저장할 수 있습니다 (예 : 포인터 및 힙에 할당되지 않음). 대조적으로 C++에는 기본 유형을 확장하지 않는 많은 원시 유형 (int, float 등)이 있습니다.

+0

zourtney가 말했다 : "이 시스템에서 모든 변수는 하나의 기본 Object 유형에서 파생됩니다." 혼란 스러울 수 있습니다. .NET에서 값 유형이 궁극적으로 Object에서 상속 되더라도 해당 내용은 "참조"보다는 스택에 저장됩니다. –

1

점은 메모리 관리는 ... 난 그냥 여기에 배우려고 노력 해요, 감사합니다; 포인터를 사용하면 프로그램이 항상 포인터를 가리키는 변수의 복사본을 만들지는 않습니다.

Why C Pointers

+0

http://stackoverflow.com/questions/162941/why-use-pointers –

2

이 OOP의 요구 사항은 아닙니다. 내용 자체보다는 일부 형식에 대한 참조를 저장하는 것이 더 효율적입니다. 복잡한 객체를 전달하는 것은 매우 번거로울 수 있지만 객체의 참조 또는 주소를 전달하는 것이 매우 효율적입니다. 대부분의 프로그래밍 언어는 이러한 개념 (값 및 참조 유형)을 모두 지원합니다 (Java 작성자는 모든 것이 객체에서 상속되도록 선택합니다).

.NET과 같은 많은 플랫폼은 경량 객체와 비슷한 종류의 구조체를 제공합니다. 그들은 상속을 지원하지 않지만 많은 구성원이있는 상당히 복잡한 구조를 가질 수 있습니다. 구조체는 복잡한 데이터 유형을 지원하지만 값 유형입니다. 물론 구조체가 너무 복잡하면 비효율적이되며 클래스를 만드는 것이 더 낫습니다.

+0

"Java의 작성자가 모든 것을 객체에서 상속 받도록 선택했습니다"라는 부분을 이해하지 못했습니다. Object 클래스가 아닙니까? – fabio

+0

@ user532722 예. 따라서 모든 유형은 참조를 사용하여 끝납니다. –

관련 문제