当前位置:  开发笔记 > 编程语言 > 正文

不是`QPoint`支持`std :: unique_ptr`?

如何解决《不是`QPoint`支持`std::unique_ptr`?》经验,为你挑选了1个好方法。

我想存储QPoint在一个应该自动释放的对象中.

#include 
#include 
#include 

using namespace std;
class MyWidget{
public:
    vector> _points;
    void f(QPoint point){
        std::unique_ptr pos(new QPoint(point));
        _points.push_back(pos);
    }
};

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    MyWidget wid;
    wid.f(QPoint(0,0));

    return a.exec();
}

错误消息是:

F:\ Qt\Qt5.5.0\Tools\mingw492_32\i686-w64-mingw32\include\c ++\ext \new_allocator.h:120:错误:使用已删除的函数'std :: unique_ptr <_Tp,_Dp> :: unique_ptr (const std :: unique_ptr <_Tp,_Dp>&)[with _Tp = QPoint; _Dp = std :: default_delete]'{:: new((void*)__ p)_Up(std :: forward <_Args>(__ args)...); } ^

这是否意味着我不应该unique_ptr用来存储QPoint



1> peppe..:

不,问题是,你不能push_back一个副本unique_ptr.

使用push_back(std::move(ptr))emplace构造.

除此之外,我没有看到需要动态分配值类,如QPoint.

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有