나는 OOP에 익숙하지 않지만 변수가 전체 객체 (C++, java 및 PHP 에서처럼)를 가질 수없는 이유를 결코 이해하지 못했습니다. 그렇다면 항상 포인터로 작업하는 것이 일반적으로 어떤 이점이 있습니까? 변수가 개체 자체가 아닌 개체에 대한 참조를 저장하는 이유는 무엇입니까?
는답변
자동 대 수동 메모리 관리가 적용됩니다. Java와 .NET과 같은 플랫폼은 garbage collector을 구현하는 가상 머신 위에서 실행됩니다. 이것은 자동으로 메모리의 할당과 파괴를 관리합니다. 이 시스템에서 모든 변수는 단일 Object
유형의 단일 변수에서 파생됩니다.
C++ 을 사용하면 스택에 객체 인스턴스를 저장할 수 있습니다 (예 : 포인터 및 힙에 할당되지 않음). 대조적으로 C++에는 기본 유형을 확장하지 않는 많은 원시 유형 (int
, float
등)이 있습니다.
zourtney가 말했다 : "이 시스템에서 모든 변수는 하나의 기본 Object 유형에서 파생됩니다." 혼란 스러울 수 있습니다. .NET에서 값 유형이 궁극적으로 Object에서 상속 되더라도 해당 내용은 "참조"보다는 스택에 저장됩니다. –
점은 메모리 관리는 ... 난 그냥 여기에 배우려고 노력 해요, 감사합니다; 포인터를 사용하면 프로그램이 항상 포인터를 가리키는 변수의 복사본을 만들지는 않습니다.
http://stackoverflow.com/questions/162941/why-use-pointers –
이 OOP의 요구 사항은 아닙니다. 내용 자체보다는 일부 형식에 대한 참조를 저장하는 것이 더 효율적입니다. 복잡한 객체를 전달하는 것은 매우 번거로울 수 있지만 객체의 참조 또는 주소를 전달하는 것이 매우 효율적입니다. 대부분의 프로그래밍 언어는 이러한 개념 (값 및 참조 유형)을 모두 지원합니다 (Java 작성자는 모든 것이 객체에서 상속되도록 선택합니다).
.NET과 같은 많은 플랫폼은 경량 객체와 비슷한 종류의 구조체를 제공합니다. 그들은 상속을 지원하지 않지만 많은 구성원이있는 상당히 복잡한 구조를 가질 수 있습니다. 구조체는 복잡한 데이터 유형을 지원하지만 값 유형입니다. 물론 구조체가 너무 복잡하면 비효율적이되며 클래스를 만드는 것이 더 낫습니다.
"Java의 작성자가 모든 것을 객체에서 상속 받도록 선택했습니다"라는 부분을 이해하지 못했습니다. Object 클래스가 아닙니까? – fabio
@ user532722 예. 따라서 모든 유형은 참조를 사용하여 끝납니다. –
- 1. 개체 속성에 대한 참조를 다른 개체에 저장할 수 있습니까?
- 2. 개체에 대한 참조를 추적하는 방법은 무엇입니까?
- 3. 목록에 개체에 대한 참조를 추가
- 4. 콤보 상자에서 개체에 대한 참조를 검색하는 방법?
- 5. 개체가 아닌 개체에 대한 호출
- 6. Java에서 클래스에 대한 참조를 저장하는 방법은 무엇입니까?
- 7. 제네릭 개체에 대한 참조를 매개 변수로 사용
- 8. C#에서 개체에 대한 참조를 찾는 방법
- 9. 변수가 아닌 변수에서 XML을로드하십시오.
- 10. 개체 참조를 JSON에 serialize
- 11. TStringList 개체에 집합을 저장하는 방법은 무엇입니까?
- 12. 여러 자식 개체에 대한 하나의 부모 개체
- 13. 내 뷰에서 Rails 인스턴스 변수가 nil이 아닌 이유는 무엇입니까?
- 14. 도메인 개체에 대한 기본 감사 데이터를 저장하는 쉬운 방법은 무엇입니까?
- 15. Entity Framework - 전체 개체 목록을 검색하지 않고 자식 개체에 대한 참조를 추가 하시겠습니까?
- 16. AD 그룹에 대한 참조를 저장하는 가장 좋은 방법은 무엇입니까?
- 17. C#에서 정수에 대한 참조를 저장하는 방법은 무엇입니까?
- 18. 변수가 NULL 인 이유는 무엇입니까?
- 19. ASP.NET에서 기본이 아닌 ProfileBase에 대한 참조를 얻는 방법은 무엇입니까?
- 20. 투명한 프록시와 실제 개체 참조를 비교합니까?
- 21. 대리인이 자체가 아닌 경우 nsxmlparser의 OO 모델
- 22. 개체에 대한 모든 이점. 개체 [i]에 대한 GetObject (i)?
- 23. 임시 개체에 대한 쿼리
- 24. 개체 참조를 문자열로?
- 25. current_user가 아닌 이유는 무엇입니까?
- 26. 이 변수가 변경되는 이유는 무엇입니까?
- 27. 필요한 DLL 참조를 저장하는 올바른 .NET_Folder는 무엇입니까?
- 28. 데이터베이스에 Ruby 메서드 참조를 저장하는 방법은 무엇입니까?
- 29. 개체에 대한 모든 참조를 제거하면 해당 개체의 이벤트 리스너가 제거됩니까?
- 30. GWTQuery를 사용하여 Window 개체에 대한 참조를 얻는 방법?
C++ *의 변수는 전체 개체를 포함 할 수 있습니다. Java의 변수는 사용할 수 없습니다. C#의 변수는 클래스가 'System.ValueType'에서 상속 한 경우에만 객체를 보유 할 수 있습니다. – cdhowie