Конструктор копирования с интеллектуальным указателем

У меня есть класс с одним std :: unique_ptr как член класса. Мне было интересно, как правильно определить конструктор копирования, поскольку я получаю следующее сообщение об ошибке компилятора: ошибка C2248: std :: unique_ptr <_Ty> :: unique_ptr: не удается получить доступ к закрытому члену, объявленному в классе 'std: : unique_ptr <_Ty> . Дизайн моего класса выглядит примерно так:

template <typename T>
class Foo{
    public:
        Foo(){};
        Foo( Bar<T> *, int );
        Foo( const Foo<T> & );
        ~Foo(){};

        void swap( Foo<T> & );
        Foo<T> operator = ( Foo<T> );

    private:
        std::unique_ptr<Bar> m_ptrBar;
        int m_Param1;

};

template < typename T >
Foo<T>::Foo( const Foo<T> & refFoo )
:m_ptrBar(refFoo.m_ptrBar), 
m_Param1(refFoo.m_Param1)
{
    // error here!
}

template < typename T >
void Foo<T>::swap( Foo<T> & refFoo ){
    using std::swap;
    swap(m_ptrBar, refFoo.m_ptrBar);
    swap(m_Param1, refFoo.m_Param1);
 }

 template < typename T >
 Foo<T> Foo<T>::operator = ( Foo<T> Elem ){
    Elem.swap(*this);
    return (*this);
 }
6
задан Tin 29 November 2011 в 19:46
поделиться