智能指针.Qt测试
1、Qt598x64vs2017(或 Qt598x86vs2015[配置使用vs2017])、Win10x64
2、测试代码:
2.1、MainWindow.h
class MainWindow : public QMainWindow
{
Q_OBJECT public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow(); private:
int Fidx;
QVector<std::shared_ptr<SmartPtr>> Fvtr;
//QVector<std::unique_ptr<SmartPtr>> Fvtr; private slots:
void on_pbtnSmartPtrAdd_clicked();
void on_pbtnSmartPtrDel_clicked();
}; class SmartPtr
{
public:
SmartPtr(int i):Fi(i){ qDebug()<< "SmartPtr(...) :" << Fi; }
~SmartPtr(){ qDebug()<< "~SmartPtr(...) :" << Fi; } private:
int Fi;
};
2.2、MainWindow.cpp
void MainWindow::on_pbtnSmartPtrAdd_clicked()
{
Fidx ++;
std::shared_ptr<SmartPtr> ptr = std::make_shared<SmartPtr>(Fidx);
//std::unique_ptr<SmartPtr> ptr = std::make_unique<SmartPtr>(Fidx);
Fvtr.append(ptr);
} void MainWindow::on_pbtnSmartPtrDel_clicked()
{
if (Fvtr.count() > )
{
std::shared_ptr<SmartPtr> ptr = Fvtr.at();
//std::unique_ptr<SmartPtr> ptr = Fvtr.at(0);
Fvtr.removeAt();
qDebug() << "after QVector<std::shared_ptr<SmartPtr>>::removeAt(0)";
}
}
2.3、控制台输出:
ZC:前3条是 点击"pbtnSmartPtrAdd"打印出来的信息,后6条是 点击"pbtnSmartPtrDel"打印出来的信息
ZC:Fvtr.removeAt(0); 后没有 立即析构SmartPtr,是在函数结束时才析构SmartPtr的
SmartPtr(...) : 2
SmartPtr(...) : 3
SmartPtr(...) : 4
after QVector<std::shared_ptr<SmartPtr>>::removeAt(0)
~SmartPtr(...) : 2
after QVector<std::shared_ptr<SmartPtr>>::removeAt(0)
~SmartPtr(...) : 3
after QVector<std::shared_ptr<SmartPtr>>::removeAt(0)
~SmartPtr(...) : 4
3、可以看到,我代码上 有注释掉 std::unique_ptr的使用(我这里的使用 是和std::shared_ptr一样的),改成 std::unique_ptr 那样的话 编译会报错:


4、
5、
智能指针.Qt测试的更多相关文章
- Qt中容器类应该如何存储对象(最好使用对象指针类型,如:QList<TestObj*>,而不要使用 QList<TestObj> 这样的定义,建议采用 智能指针QSharedPointer)
Qt提供了丰富的容器类型,如:QList.QVector.QMap等等.详细的使用方法可以参考官方文档,网上也有很多示例文章,不过大部分文章的举例都是使用基础类型:如int.QString等.如果我们 ...
- Qt智能指针简明说明
下面的智能指针分别对应boost库,Qt库,c++11的智能指针 boost::scoped_ptr QScopedPointer unique_ptr 在其生命期结束后会自动删除它所指的对象(确定 ...
- Qt 智能指针学习(7种指针)
Qt 智能指针学习 转载自:http://blog.csdn.net/dbzhang800/article/details/6403285 从内存泄露开始? 很简单的入门程序,应该比较熟悉吧 ^_^ ...
- Qt 智能指针学习(7种QT的特有指针)
从内存泄露开始? 很简单的入门程序,应该比较熟悉吧 ^_^ #include <QApplication> #include <QLabel> int main(int arg ...
- Qt 智能指针学习(7种QT智能指针和4种std智能指针)
从内存泄露开始? 很简单的入门程序,应该比较熟悉吧 ^_^ #include <QApplication> #include <QLabel> int main(int arg ...
- Qt 智能指针学习
原地址:http://blog.csdn.net/dbzhang800/article/details/6403285 从内存泄露开始? 很简单的入门程序,应该比较熟悉吧 ^_^ #include & ...
- [转]Qt 智能指针学习
从内存泄露开始? 很简单的入门程序,应该比较熟悉吧 ^_^ #include <QApplication> #include <QLabel> int main(int arg ...
- 一次测试测试(C++11)智能指针引用的崩溃结论
项目中用到了智能指针,但是要在智能指针指向的类中获取此类的shared_ptr指针传给其引用的类,结果出现了问题, 测试代码如下: (包括错误解释) //测试 shared_ptr weak_ptr ...
- Qt 中使用智能指针
教研室的项目,就是用Qt做个图形界面能收发数据就可以了,但是创建数据管理类的时候需要各种new, delete,很小心了但是内存使用量在不断开关程序之后函数会长,由于用的是gcc 4.7.* 所以好 ...
随机推荐
- Bzoj 2818: Gcd(莫比乌斯反演)
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的 数对 ...
- Processing中和值域相关的函数
今天在群里有人问了个问题:请教下啊,群里能有高手讲讲norm(), lerp(), map()么,英文的实在是没看懂呀?鉴于很多人初学Processing都没弄明白这3个函数的用法,我这里简单介绍一下 ...
- mac系统提示 interactive intelligence 的恼人问题
处理 interacti intelligence 提示问题记录 二手购买了一台电脑,从最初的小白到现在稍微熟悉mac的使用, 一直困扰我的便是一个提示, 上图 困扰多年, 记录一下解决和尝试过程吧. ...
- Go程序员面试算法宝典-读后感1
这本书是讲解Go语言程序员面试笔试真题的书籍,讲的还不错,值得一看. 计算机技术博大精深,日新月异………………大神们疯狂的更新着技术,(我就更新,不服打我呀)虽然换汤不换药,又有几个人能精通基础,再延 ...
- Alpha(2/6)
队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 任务分配.进度监督 提交记录(全组共用) 接下来的计划 沟通前后端成员,监督.提醒他们尽快完成各自的进度 还剩下哪些任务 ...
- Java RabbitMQ配置和使用,基于SpringBoot
package rabbitmq.demo; import com.rabbitmq.client.AMQP; import org.junit.Test; import org.junit.runn ...
- 6、vueJs基础知识06
vue动画 transition 之前1.0版本是以 属性的形式展示的 <p transition="fade"></p> .fade-transition ...
- 2019软工实践_Alpha(3/6)
队名:955 组长博客:https://www.cnblogs.com/cclong/p/11872693.html 作业博客:https://edu.cnblogs.com/campus/fzu/S ...
- 开源JS图片裁剪插件
开源JS图片裁剪插件 一.总结 一句话总结: 要用点赞最高的插件,这样适用性最好,效果最好,出问题的概率也最低,这里电脑端和手机端都可以用的建议用 cropper.js 二.5款好用的开源JS图片裁剪 ...
- 前端 img标签显示 base64格式的 图片
本文链接:https://blog.csdn.net/kukudehui/article/details/80409522在做项目的时候,我从后端返回了一个base64格式的图片文件,想把它渲染在前端 ...