2016-12-01 2 views
0

새 개체 인스턴스에 데이터베이스 연결을 전달해야합니다. 그러나 다음 코드는 원하는대로 작동하지 않습니다. C++ 생성자에서 속성에 대한 참조를 할당하십시오.

class child { 
    public: 
    db_connection Con; 
    child(db_connection& Con); 
}; 

child::child(db_connection& Con) { 
    this->Con = Con; 
} 

생성자에서 할당

이 오류가 발생합니다 : 삭제 기능의 사용 ....

나는 이것이이 콘의 새로운 객체를 생성 할 db_connection의 생성자를 호출 의미합니다 알고있다. 그러나 그것은 내가 갖고 싶은 것이 아닙니다.

그리고 참조가 초기화 또는 할당해야하기 때문에 나는

class child { 
    public: 
    db_connection& Con; 
    ... 

으로 클래스 선언에서 속성 '콘'을 선언 할 수 없습니다. 이것은 어려운 상황입니다.

답변

4

참고로 참조를 사용하려면 으로 초기화해야합니다. 이를 위해 당신이 생성자 초기화 목록을 사용해야합니다 대신 생성자 내부에서 그것에 할당 멤버 변수를 초기화

class child { 
    db_connection& Con; 

    public: 
    child(db_connection& con) : Con(con) 
    {} 
    ... 
}; 

있다. child 만약

+0

2 개 이상의 변수를 전달하는 것은 어떻습니까? Con (Con), Var (Var), ...? – johnlowvale

+0

오, 내가 찾았 쉼표로 구분 된 – johnlowvale

+0

그것은 여전히 ​​"삭제 된 함수의 사용 ..."오류 : 삭제 된 함수 'mongocxx :: v_noabi :: 클라이언트 :: 클라이언트 (const mongocxx :: v_noabi :: 클라이언트 &)'사용 Db_Client (Db_Client _), 요청 (요청 _), 응답 (Response_) – johnlowvale

1

는, 당신은 이동 생성자 사용할 수 있습니다 건설에 전달 된 연결 인스턴스의 소유권을 할 수있다 :

child(db_connection&& Con_) : Con(std::move(Con_)){}

값 사본을 미연에 방지 매달린 참조의 잠재력. 이렇게하면 생성자에 전달 된 Con_이 무효화됩니다.

+0

예, 변수 전달은 공개 – johnlowvale

+0

입니다.이 경우이 답은 카누의 트랩 도어만큼 유용합니다. 다른 인스턴스에서 유용 할 수 있기 때문에 나는 그것을 떠날 것이다. – Bathsheba

+0

이 사실은 무서운 것입니다 : "이것은 생성자에 전달 된 Con_를 무효화합니다." 변수의 원래 소유자는이 변수를 더 이상 사용할 수 없습니까? 두 번째 아이에게 같은 Con_를 전달할 수없는 것 같습니다. – johnlowvale

관련 문제