2017-02-09 6 views
3

나는 std::shared_ptr을 배우고 있습니다.
복사 생성자를 찾으려면 shared_ptr의 생성자에 대한 문서를 읽었습니다.std :: shared_ptr <X>에 복사 생성자가 있습니까?

내가 생성자를 찾을 수

,

shared_ptr(const shared_ptr& r); 

을하지만 내가 기대 간단한 복사 생성자 아닌 것 같다,

shared_ptr(shared_ptr& r); 

을하고 주 카운터를 참조하지 않는 것 같다.

shared_ptr에는 간단한 복사 생성자가 없습니까? 경우

, 나는

class A { 
public: 
    A(shared_ptr<X>& sptr) : sptr_(sptr) {} 
private: 
    shared_ptr<X> sptr_; 
}; 
+2

복사 생성자는 보통 (전달 된 객체를 수정해서는 안되기 때문에)'const' 부분을 가지지 만 필요하지는 않습니다. –

+0

잘못된 것을 기대하고 있습니다. C++의 복사 생성자는 복사되는 것을 수정하지 않기 때문에 보통 상수 * (그러므로'const') 참조를 취합니다. – filmor

+0

@filmor : 의견을 주셔서 감사합니다. 이 사본이 원본 shared_ptr 인스턴스의 참조 카운터를 증가 시키나요? – mora

답변

4

왜 shared_ptr의 간단한 복사 생성자가없는, 정말 아래에 수행 할 작업을 쓰기? 첫 번째 매개 변수는 타입 X &, CONST X &, 휘발성 X & 또는 const를 휘발성 X의 경우

클래스 X를위한 템플릿이 아닌 생성자 복사 생성자는 다음과 같습니다

이 표준은 말한다 & [...]은 간단한 복사 생성자 같은 것도 없다

. std::shared_ptr에는 완벽하게 유효한 복사 생성자가 대신 있습니다. 주어진 객체와 소유권을 공유하는 std::shared_­ptr 객체를 생성합니다 (유효한 경우).

+1

답변 해 주셔서 감사합니다. – mora

+0

@mora 환영합니다. – skypjack