标签: qscopedpointer

Qt相当于boost :: ptr_vector?

我需要一个指针容器来取得指针的所有权 - 即当一个元素被删除,或者容器超出范围时,它释放所有指针,就像在boost::ptr_vector.

QList<QScopedPointer<AbstractClass> > 不起作用(编译错误,没有复制构造函数?).

现在我正在使用QList<QSharedPointer<AbstractClass> >,但感觉就像一个矫枉过正,它的引用计数和多线程的昂贵的互斥量.

编辑:我刚刚了解了QPtrList(感谢@ForEveR),它在Qt3中非常相同,但是从更高版本中删除了.我只是不明白为什么他们会删除它.

c++ qt qtcore qscopedpointer qsharedpointer

6
推荐指数
1
解决办法
298
查看次数

稍后创建QScopedPointer的实例

例如,这是我的代码

QScopedPointer<QTimer> timer2(new QTimer);
Run Code Online (Sandbox Code Playgroud)

但我想定义

QScopedPointer<QTimer> timer2; 
Run Code Online (Sandbox Code Playgroud)

在mainwindow.h中创建一个实例

timer2(new QTimer);
Run Code Online (Sandbox Code Playgroud)

在mainwindow.cpp中

怎么样?

qt pointers qscopedpointer

4
推荐指数
1
解决办法
2054
查看次数

unique_ptr 并传递到连接

在我的代码中

std::unique_ptr<QNetworkAccessManager> myNetworkAccessManager;
...
myNetworkAccessManager.reset(new QNetworkAccessManager(this));

QObject::connect(myNetworkAccessManager.get(), SIGNAL(finished(QNetworkReply *)), this, SLOT(OnNetworkFinished(QNetworkReply *)));
Run Code Online (Sandbox Code Playgroud)

有问题的代码:connect() 中的myNetworkAccessManager.get ()

我的问题是最好的方法是什么?

我正在阅读这篇文章 ,它在 Legacy Code 下说:

调用 get() 返回一个指向底层方法的指针。如果可以,您真的想避免调用它,因为一旦您将原始指针释放到野外,您就失去了通过切换到 unique_ptr 所获得的许多优势

更新

如果我改成使用如果我使用QScopedPointer,我的代码如下:

QScopedPointer<QNetworkAccessManager> myNetworkAccessManager;
...
myNetworkAccessManager.reset(new QNetworkAccessManager(this));

QObject::connect(myNetworkAccessManager.data(), SIGNAL(finished(QNetworkReply *)), this, SLOT(OnNetworkFinished(QNetworkReply *)));
Run Code Online (Sandbox Code Playgroud)

这会是正确的解决方案吗:

connect(myNetworkAccessManager.data()
Run Code Online (Sandbox Code Playgroud)

更新 2

阅读此链接stackoverflow似乎使用 data() 是正确的解决方案。这意味着使用 stl 中的 get() 也是正确的。

qt unique-ptr c++11 qscopedpointer

4
推荐指数
1
解决办法
3684
查看次数

QScopedPointers的QList

我正在尝试将QScopedPointers存储在QList中.

我发现了这个评论

也可以使用QList>. - Kuba Ober 2014年1月14日18:17

(首先评论这个答案:https://stackoverflow.com/a/21120575/3095014)

这篇文章https://forum.qt.io/topic/59338/solved-qlist-of-qscopedpointers暗示这应该有效.但是,如果我尝试编译第二个链接的代码,我会收到此错误:

E:\Qt\Qt5Enterprise\5.5\msvc2013\include\QtCore/qlist.h(404) : error C2248: 'QScopedPointer<Label,QScopedPointerDeleter<T>>::QScopedPointer' : cannot access private member declared in class 'QScopedPointer<Label,QScopedPointerDeleter<T>>'
    with
    [
        T=Label
    ]
    E:\Qt\Qt5Enterprise\5.5\msvc2013\include\QtCore/qscopedpointer.h(170) : see declaration of 'QScopedPointer<Label,QScopedPointerDeleter<T>>::QScopedPointer'
    with
    [
        T=Label
    ]
    E:\Qt\Qt5Enterprise\5.5\msvc2013\include\QtCore/qlist.h(403) : while compiling class template member function 'void QList<QScopedPointer<Label,QScopedPointerDeleter<T>>>::node_construct(QList<QScopedPointer<T,QScopedPointerDeleter<T>>>::Node *,const QScopedPointer<T,QScopedPointerDeleter<T>> &)'
    with
    [
        T=Label
    ]
    E:\Qt\Qt5Enterprise\5.5\msvc2013\include\QtCore/qlist.h(553) : see reference to function template instantiation 'void QList<QScopedPointer<Label,QScopedPointerDeleter<T>>>::node_construct(QList<QScopedPointer<T,QScopedPointerDeleter<T>>>::Node *,const QScopedPointer<T,QScopedPointerDeleter<T>> &)' being compiled
    with
    [
        T=Label
    ]
    E:\Qt\Qt5Enterprise\5.5\msvc2013\include\QtCore/qlist.h(794) …
Run Code Online (Sandbox Code Playgroud)

qt containers smart-pointers qt5 qscopedpointer

3
推荐指数
1
解决办法
2159
查看次数

QScopedPointer vs boost :: scoped_ptr [选择哪一个]

如果我可以选择QScopedPointer和之间做出选择boost::scoped_ptr,在以下情况下哪一个会做得最好:

1. QScopedPointer<QObject> Vs boost::scoped_ptr<QObject>
2. QScopedPointer<QtContainer> Vs boost::scoped_ptr<QtContainer>
3. QScopedPointer::data() Vs boost::scoped_ptr::get()
Run Code Online (Sandbox Code Playgroud)

qt boost qscopedpointer

2
推荐指数
1
解决办法
1022
查看次数