그 질문 제목은 한 입 가득합니다. 기본적으로, 벡터 내에서 이중으로 연결된 목록을 사용하는 해시 테이블 구조를 만듭니다. 모든 오버로드 된 생성자를 사용하여 개체를 만들 때 잘 작동하지만 기본 생성자를 사용하면 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
을 만든 후 중단 점을 설정하지만, 기본으로 돌아 다음에 시도 후 (기본 생성자 만 사용하는 경우) 테이블을 사용하면 벡터의 크기와 변수 currentSize가 잘못되었습니다.
메인으로 돌아 가기 전에, 객체를 생성 한 후 :
currentSize = 53
table [size] = 53, [capacity] = 53, empty linked lists fill the vector
주에서 ht.hash(value)
를 호출, 개체가 지금 가지고 : 벡터가 0 자체를 재설정 원인이 무엇
currentSize = -858993460
table [size] = 0, [capacity] = 0, linked lists obviously gone.
내 특히 코드 경로가 모두
HashTable(int tableSize)
을 통해 작동하므로 private int currentSize가 펑키가 될까요?
'HashTable (53);'다른 생성자에 위임하지 않습니다. IIRC는 임시를 만듭니다. C++ 11에서는 HashTable :: HashTable() : HashTable (53) {}'(* 위임자 생성자 * 및/또는 * 멤버 초기 자 목록 * 검색)을 통해 다른 생성자에 위임 할 수 있습니다. – dyp
@dyp - 감사합니다! 'this-> HashTable :: HashTable (53);'또는 이니셜 라이저 목록이 잘 작동했습니다 \t. – tloveless
'this-> HashTable :: HashTable (53);'[함수 몸체 안에서 작동해서는 안됩니다 '] (http://coliru.stacked-crooked.com/a/93a68f895ed0e74c) oO 생성자가 정상이 아닙니다. 함수를 호출 할 수 있습니다. – dyp