You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
template<typename T>
classSmartPtr{
public:template<typename U>
SmartPtr(const SmartPtr<U>& other) // 이 SmartPtr에 담긴 포인터를
: heldPtr(other.get()) {} // 다른 SmartPtr에 담긴 포인터로 초기화한다.
T * get() const {return heldPtr;}
private:
T *heldPtr; // SmartPtr에 담긴 기본 제공 포인터
}
암시적 변환이 가능할 때만 컴파일 에러가 나지 않는다.
SmartPtr<T>의 일반화 복사 생성자는 호환되는 타입의 매개변수를 넘겨받을 때만 컴파일 되게 된다.
어떤 클래스의 복사 생성을 전부 컨트롤 하고자 한다면 일반화 복사 생성자는 물론이고 보통의 복사 생성자까지 직접 선언해야 한다.
template<classT> classshared_ptr{
public:shared_ptr(shared_ptr const& r); // 복사 생성자template<classY> // 일반화shared_ptr(shared_ptr<T> const& r); // 복사 생성자
shared_ptr& operator=(shared_ptr const& r); // 복사 대입 연산자template<classY> // 일반화
shared_ptr& operator=(shared_ptr<Y> const& r); // 복사 대입 연산자
}