unique_ptr,移动构造函数,以及为什么总是尝试访问私有成员

use*_*658 1 c++ copy-constructor unique-ptr move-constructor c++11

我经常遇到这个问题,我相信移动构造函数是有序的,但我认为复制构造函数是问题,隐藏它似乎不起作用.

代码:

template <class T>
class LinkedList{
public:
    //
    LinkedList() {}
    LinkedList(const T &data);
    LinkedList(const T &data, const LinkedList &node);
    LinkedList(const LinkedList &object);
    LinkedList &operator=(const LinkedList &object);

    ~LinkedList() {}

    std::shared_ptr<LinkedList> push_back(const T& data);

private:
    T data;
    std::unique_ptr<LinkedList> link;

    std::unique_ptr<LinkedList> LinkFactory(const LinkedList &node);

    std::shared_ptr<LinkedList> CreateStartNode(const T &data);
    std::shared_ptr<LinkedList> CreateNode(const T &data, const LinkedList &node);
};
Run Code Online (Sandbox Code Playgroud)

发生错误的特定行是:

LinkedList<T>::LinkedList(const LinkedList<T> &object) : data(object.data),  
link(std::move(object.link)) {}
Run Code Online (Sandbox Code Playgroud)

我试图移动而不是复制复制构造函数中的链接无济于事.如果设计移动构造函数而不是合成,那会更好吗?

Arn*_*rtz 5

你不能移动一个常量对象,因为它object被声明为const,所以object.link也是const.

这看起来像一个破碎的设计,因为通常该构造函数是一个复制构造函数,但你试图链接移出参数,这意味着你试图窃取它拥有的资源.你有一个LinkFactory方法,看起来你应该使用它,如果它做的名称承诺.