class A가 구현되어 있고 class B 내부의 멤버 변수로 A를 사용하고 싶습니다.
코드는
class B{
private:
A a;
};
그리고 문제는
void B::function(){
...
job(a)
}
이런식으로 B의 메소드 안에서 a를 사용하려 하니 error:use of deleted function 'A::A(const A&)' 이런 오류 메세지가 나면서 빌드 실패가 뜹니다.
우선 A *a로 포인터로 바꿔주고 B의 생성자에서 A를 명시적으로 new로 할당하는 식으로 바꾸니 문제없이 돌아는 가는데 원래 방식이 왜 실패한건지 궁금합니다. 제 생각에는 A의 생성자가 명시적으로 호출이 안되서 뭔가 꼬인것같은데 혹시 정확하게 아시는분 계신가요?
A 클래스도 올려놔야지. A 클래스 안에서 접근자 실수한 거 아냐?
A::(const A&) 가 delete 됬대여
복사생성자 제거하셧대여
명시적으로 제거를 안했는데 왜 자기혼자 삭제됐을까요...
이렇게만봐서는 뭐가문제인지 알기 힘든데
move constructor 을 만들어 놓은 거 아냐? 그런 경우엔 복사 생성자가 암묵적으로 제거됨
아니면 A를 복사로 던지지 말고 참조로 던지던지
멤버변수가 복사 못 하는 것 (명시적으로 복사 생성자를 삭제한 클래스의 인스턴스)가 있으면 소유 클래스의 암시적으로 생성된 복사 생성자도 삭제됨