기본 생성자에서 오버로드 된 생성자를 호출 할 때 개체 상태 정보 유지

사랑이없는

그 질문 제목은 한입입니다. 기본적으로 벡터 내에서 이중 연결 목록을 사용하는 해시 테이블 구조를 만들고 있습니다. 오버로드 된 생성자를 사용하여 개체를 만들면 모든 것이 잘 작동하지만 기본 생성자를 사용하면 main으로 돌아온 후 개체의 상태가 펑키하게됩니다.

내 생성자 :

    HashTable::HashTable()
    {
            HashTable(53);
    }

    HashTable::HashTable(int tableSize)
    {
            currentSize = tableSize;
            table.resize(tableSize);
    }

개체 생성 후 중단 점 설정

    HashTable ht(size); //this works
    HashTable ht;       //this does not work

코드를 단계별로 살펴보면 오버로드 된 생성자가 정상적으로 호출되는 것을 알 수 있지만 main으로 돌아간 다음 테이블을 사용하려고 시도하면 (기본 생성자 만 사용하는 경우) 벡터의 크기와 변수 currentSize가 잘못되었습니다.

객체를 생성 한 후 메인으로 돌아 가기 전 :

currentSize = 53
table [size] = 53, [capacity] = 53, empty linked lists fill the vector

ht.hash(value)main에서 호출 할 때 객체는 이제 다음을 갖습니다.

currentSize = -858993460
table [size] = 0, [capacity] = 0, linked lists obviously gone.

특히 코드 경로가 모두 작동하기 때문에 벡터가 자체적으로 0으로 재설정되고 개인 int currentSize가 펑키하게되는 원인은 무엇입니까 HashTable(int tableSize)?

사랑이없는

@dyp 올바른 방향으로 나를 가리 켰습니다.

HashTable(53); 임시 로컬 개체를 만드는 중이었습니다-기본 개체를 원하는 크기 인 53으로 설정하지 않았습니다.

임시 개체를 만드는 대신 기본 개체에서 오버로드 된 생성자를 호출하려면 this->HashTable::HashTable(53);Visual Studio에서 오버로드 된 생성자가 호출 개체에서 호출되도록 강제했습니다.

편집 : gcc 컴파일러는 이것을 금지하며 컴파일러가 허용하는지 여부에 관계없이 일반적으로 나쁜 습관으로 간주됩니다.

이니셜 라이저 목록 HashTable::HashTable() : HashTable(53) {}은 내가하려는 작업을 수행하는 올바른 방법으로 간주됩니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

헤더 파일 내에서 멤버 개체를 정의 할 때 비어 있지 않은 생성자 호출

분류에서Dev

파생 된 즉시 개체에서 재정의되지 않은 기본 메서드에서 가상 메서드를 간접적으로 호출 할 때 vtable 조회가 수행됩니까?

분류에서Dev

(C ++) 생성자, 기본 매개 변수, "오버로드 된 호출 ... 모호함"

분류에서Dev

자체 정의 된 스토리 보드를 기본 인터페이스로 설정할 때 오류 발생

분류에서Dev

기본 생성자 함수에서 상속 할 때 생성자를 직접 설정하는 것보다 Object.defineProperty ()가 선호됩니다.

분류에서Dev

파생 클래스에서 오버로드 된 기본 생성자 호출

분류에서Dev

오버로드 된 할당 연산자를 호출 할 때 복사 생성자가 호출되는 이유는 무엇입니까?

분류에서Dev

사전 정의 된 유형으로 생성자를 호출 할 때 동적으로 유형 설정

분류에서Dev

[<개체> 설명]을 매개 변수로 전달할 때 사용자 지정된 NSLog에서 오류를 생성합니다.

분류에서Dev

객체 생성자를 호출 할 때 오류 발생

분류에서Dev

이 기본 기본 생성자에서 복사 생성자를 호출 할 때 gcc 4.8.2가 올바른가요?

분류에서Dev

파생 생성자의 멤버 초기화 목록에서 상속 된 보호 필드에 액세스 할 수없는 이유는 무엇입니까?

분류에서Dev

기본 생성자를 호출하지 않고 멤버 개체 선언

분류에서Dev

클래스의 객체에 정수 값을 할당 할 때 매개 변수화 된 생성자가 호출되는 이유는 무엇입니까?

분류에서Dev

상속에서 기본 생성자가 가상 메서드를 호출 할 때 클래스가 Dervied이고 Dervied 메서드를 호출하는 이유는 무엇입니까?

분류에서Dev

소멸자가 호출되지만 개체를 매개 변수로 전달할 때 생성이 호출되지 않는 이유는 무엇입니까?

분류에서Dev

비 정적 메서드를 호출 할 때 구조체의 정적 생성자가 호출되는 이유는 무엇입니까?

분류에서Dev

자체 서명 된 인증서를 생성 할 때 Req에 OpenSSL 오류 발생

분류에서Dev

기본 개체 (비가 상)를 사용하여 파생 클래스에 정의 된 함수를 호출 할 수있는 이유는 무엇입니까?

분류에서Dev

Vue-다른 명명 된 뷰를 변경할 때 기본 라우터 뷰를 활성 상태로 유지

분류에서Dev

익명 객체를 사용할 때 기본 생성자 또는 복사 생성자가 호출되지 않습니다.

분류에서Dev

C ++에서 복사 생성자가 호출되는 경우 다른 개체에 개체를 할당 할 때 호출되지 않습니까?

분류에서Dev

C ++에서 기본 클래스에 대한 포인터가 주어 졌을 때 파생 클래스 개체에 대한 오버로드 된 함수가 호출되지 않는 이유는 무엇입니까?

분류에서Dev

상위 생성자에서 호출되는 재정의 된 메서드가 필드를 초기화하지 않습니다.

분류에서Dev

JSON 문자열에서 구문 분석 할 때 개체 생성자가 호출되지 않음

분류에서Dev

Java에서 기본 생성자로 지정된 long 값

분류에서Dev

전자 메일을 보내기 위해 작업 함수를 호출 할 때 개체 참조가 개체의 인스턴스로 설정되지 않음

분류에서Dev

Eclipse는 다른 패키지에있는 하위 클래스에서 보호 된 생성자를 사용하려고 할 때 오류를 표시합니다.

분류에서Dev

생성자가 다른 기본 생성자를 호출 할 때 생성자 간 중복을 방지하는 방법

Related 관련 기사

  1. 1

    헤더 파일 내에서 멤버 개체를 정의 할 때 비어 있지 않은 생성자 호출

  2. 2

    파생 된 즉시 개체에서 재정의되지 않은 기본 메서드에서 가상 메서드를 간접적으로 호출 할 때 vtable 조회가 수행됩니까?

  3. 3

    (C ++) 생성자, 기본 매개 변수, "오버로드 된 호출 ... 모호함"

  4. 4

    자체 정의 된 스토리 보드를 기본 인터페이스로 설정할 때 오류 발생

  5. 5

    기본 생성자 함수에서 상속 할 때 생성자를 직접 설정하는 것보다 Object.defineProperty ()가 선호됩니다.

  6. 6

    파생 클래스에서 오버로드 된 기본 생성자 호출

  7. 7

    오버로드 된 할당 연산자를 호출 할 때 복사 생성자가 호출되는 이유는 무엇입니까?

  8. 8

    사전 정의 된 유형으로 생성자를 호출 할 때 동적으로 유형 설정

  9. 9

    [<개체> 설명]을 매개 변수로 전달할 때 사용자 지정된 NSLog에서 오류를 생성합니다.

  10. 10

    객체 생성자를 호출 할 때 오류 발생

  11. 11

    이 기본 기본 생성자에서 복사 생성자를 호출 할 때 gcc 4.8.2가 올바른가요?

  12. 12

    파생 생성자의 멤버 초기화 목록에서 상속 된 보호 필드에 액세스 할 수없는 이유는 무엇입니까?

  13. 13

    기본 생성자를 호출하지 않고 멤버 개체 선언

  14. 14

    클래스의 객체에 정수 값을 할당 할 때 매개 변수화 된 생성자가 호출되는 이유는 무엇입니까?

  15. 15

    상속에서 기본 생성자가 가상 메서드를 호출 할 때 클래스가 Dervied이고 Dervied 메서드를 호출하는 이유는 무엇입니까?

  16. 16

    소멸자가 호출되지만 개체를 매개 변수로 전달할 때 생성이 호출되지 않는 이유는 무엇입니까?

  17. 17

    비 정적 메서드를 호출 할 때 구조체의 정적 생성자가 호출되는 이유는 무엇입니까?

  18. 18

    자체 서명 된 인증서를 생성 할 때 Req에 OpenSSL 오류 발생

  19. 19

    기본 개체 (비가 상)를 사용하여 파생 클래스에 정의 된 함수를 호출 할 수있는 이유는 무엇입니까?

  20. 20

    Vue-다른 명명 된 뷰를 변경할 때 기본 라우터 뷰를 활성 상태로 유지

  21. 21

    익명 객체를 사용할 때 기본 생성자 또는 복사 생성자가 호출되지 않습니다.

  22. 22

    C ++에서 복사 생성자가 호출되는 경우 다른 개체에 개체를 할당 할 때 호출되지 않습니까?

  23. 23

    C ++에서 기본 클래스에 대한 포인터가 주어 졌을 때 파생 클래스 개체에 대한 오버로드 된 함수가 호출되지 않는 이유는 무엇입니까?

  24. 24

    상위 생성자에서 호출되는 재정의 된 메서드가 필드를 초기화하지 않습니다.

  25. 25

    JSON 문자열에서 구문 분석 할 때 개체 생성자가 호출되지 않음

  26. 26

    Java에서 기본 생성자로 지정된 long 값

  27. 27

    전자 메일을 보내기 위해 작업 함수를 호출 할 때 개체 참조가 개체의 인스턴스로 설정되지 않음

  28. 28

    Eclipse는 다른 패키지에있는 하위 클래스에서 보호 된 생성자를 사용하려고 할 때 오류를 표시합니다.

  29. 29

    생성자가 다른 기본 생성자를 호출 할 때 생성자 간 중복을 방지하는 방법

뜨겁다태그

보관