2017-09-19 15 views
-2

제발, stackoverflow의 제발, 나에게 자비를 베풀어주십시오. 내 임무는 1 시간 만에 끝날 것이고 모든 것이 작동한다. 나는 내 인생에 대해 내 이동 생성자 (그리고 확장으로, 나의 카피 할당)가 세분화 오류를 던지는 이유를 알 수 없다는 것을 제외하고는!C++ : Movement Constructor가 세그멘테이션 오류를 발생 시켰습니까?

도움이되는 경우 추가 정보 : 프로그램은 기본적으로 모든 데이터 유형의 배열을 저장하는 Chain이라는 데이터 구조를 만들고 크기가 size_t입니다.

미리 감사 드리며 더 자세한 정보가 필요하면 알려주세요.

// Copy-constructor. 
Chain(const Chain &rhs) { 
    size_ = rhs.size(); 
    array_ = new Object[size_]; 
    for (int i = 0; i < size_; i++) { 
     array_[i] = rhs.array_[i]; 
    } 
} 

// Copy-assignment. 
Chain& operator=(const Chain &rhs) { 
    Chain copy = rhs; 
    std::swap(*this, copy); 
    return *this; 
} 

// Move-constructor. 
Chain(Chain &&rhs) { 
    rhs.array_ = nullptr; 
} 
+0

이동 생성자가 실제로 클래스 멤버를 설정하지 않으므로 이후 작업이 실패 할 가능성이 있습니다 ... –

+0

True. 나는 이것이 문제라고 생각하지 않는다. 나의 구현은 정확히 내 교수가 제안한 것이었다. – BowmanBeric

+0

@BowmanBeric 그러면 교수님이 틀립니다. 또는 당신은 당신에게 한 말을 오해했습니다. –

답변

2

이동 생성자가 잘못되었습니다. 입력 객체의 배열을 이동하여 소유권을 가져 오지 않으며 생성되는 객체의 데이터 멤버를 설정하지 않습니다. 또한

Chain(Chain &&rhs) { 
    size_ = rhs.size(); 
    array_ = rhs.array_; 
    rhs.array_ = nullptr; 
    rhs.size_ = 0; 
} 

:

보조 노트에
Chain(Chain &&rhs) : array_(nullptr), size_(0) { 
    std::swap(size_, rhs.size_); 
    std::swap(array_, rhs.array_); 
} 

, 과제 연산자가 모두 복사 할당 역할 및 이동 할당을 할 수 있도록 단순화 할 수있다 : 그것은 더이 대신 같아야합니다

Chain& operator=(Chain rhs) { 
    std::swap(*this, rhs); 
    return *this; 
}