2012-09-27 4 views
5

마찬가지로 기본 복사 생성자가 모든 구성원에 대해 복사 생성자를 호출합니까? 예를 들어, 클래스가 너무 같은 비 POD 구성원이있는 경우 :기본 할당 연산자는 모든 구성원에 대해 operator = 연산자를 호출합니까?

class A 
{ 
    std::string str; 
}; 

... 할 기본 컴파일러 생성 된 복사 생성자와 대입 연산자 작업이 제대로? 그들은 문자열의 복사 생성자 및 operator=을 호출 할 것인가 아니면 구성원 변수 str의 비트 단위 복사본을 만들겠습니까?

다른 말로하면, std::string 회원을 보유하고 있다는 것은이 클래스가 사용자 구현 복사 생성자와 할당 연산자를 필요로한다는 것을 의미합니까?

답변

5

예, 컴파일러에서 생성 한 컴파일러가 올바르게 작동합니다.

그러나 자신을 구현하고 비워두면 비어있게됩니다.

메모리를 관리하지 않고 모든 구성원이 올바른 복사/할당/삭제를 제공하는 경우 자신의 복사 생성자/소멸자/할당 연산자가 필요하지 않습니다.

즉, std :: string 멤버가 있으면이 클래스는 사용자 구현 복사 생성자와 할당 연산자가 필요합니까?

아니요, 컴파일러에서 생성 한 컴파일러는 완벽하게 작동합니다.

+0

"예, 컴파일러에서 생성 한 컴파일러가 올바르게 작동합니다." - const 멤버가있는 클래스의 경우에도? –

+0

@spin_eight 그렇다면 복사 또는 할당이 컴파일되지 않습니다. –

+3

@LuchianGrigore : 실제로 사본이 컴파일됩니다. 과제는 분명히 알 수 없습니다. –