【问题标题】:singly linked list push function error单链表推送功能错误
【发布时间】:2017-05-09 07:39:38
【问题描述】:

我不知道自己做错了什么,但推送功能有问题。你能帮帮我吗?

#include<iostream>
#include<memory>
using namespace std;

struct lista {
    int value;
    unique_ptr<lista>next;

    lista(int value):value(value), next(nullptr){}


};
void push(int x, unique_ptr<lista> &h) {
    unique_ptr<lista>alok_pam_x = make_unique<lista>(x);
    if (alok_pam_x!= nullptr)
    {
        (alok_pam_x->next) = h;
        h = alok_pam_x;

    }

}

我有错误:

严重性代码描述项目文件行抑制状态 错误 C2280 'std::unique_ptr> &std::unique_ptr<_ty>>::operator =(const std::unique_ptr<_ty>> &)':试图 引用已删除的函数
严重性代码描述项目文件行抑制状态错误 (活动)函数“std::unique_ptr<_ty _dx>::operator=(const std::unique_ptr<_ty _dx>::_Myt &) [with _Ty=lista, _Dx=std::default_delete]”(在“c:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\memory”的第 1436 行声明)不能 引用——是一个被删除的函数

【问题讨论】:

    标签: c++ visual-c++ c++14 unique-ptr


    【解决方案1】:

    您正试图在两个地方复制unique_ptr,但unique_ptr 是仅移动类型,无法复制。您需要改为std::move

    另外,在调用make_unique 之后检查nullptr 是没有意义的,因为如果分配失败,它会抛出std::bad_alloc 并且永远无法进行检查。

    所以你的push 函数应该是这样的

    void push(int x, unique_ptr<lista> &h) {
        auto alok_pam_x = make_unique<lista>(x);
        alok_pam_x->next = move(h);
        h = move(alok_pam_x);
    }
    

    最后,您或许应该考虑将push 设为lista 的成员函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-18
      • 1970-01-01
      • 2013-07-15
      • 2014-12-19
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多