智能指针.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.* 所以好 ...
随机推荐
- contextMenuEvent
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QDesktopWidget&g ...
- 洛谷 P2791 幼儿园篮球题
洛谷 P2791 幼儿园篮球题 https://www.luogu.org/problemnew/show/P2791 我喜欢唱♂跳♂rap♂篮球 要求的是:\(\sum_{i=0}^kC_m^iC_ ...
- python 之 列表常用 操作
- C语言scanf函数返回值小记
scanf scanf是C标准库stdio里面定义的用于获取用户输入的函数,具体的介绍可以在CppReference上看到.scanf的返回值是已经成功赋值的变量个数,也就是说在 scanf(&quo ...
- RabbitMQ入门学习系列(六) Exchange的Topic类型
快速阅读 介绍exchange的topic类型,和Direct类型相似,但是增加了"."和"#"的匹配.比Direct类型灵活 Topic消息类型 特点是:to ...
- JavaWeb之Tomcat(2) —— Tomcat的使用
1. 启动和关闭Tomcat (1) 打开Tomcat的安装目录,在 bin 目录下,有四个文件: startup.bat 和 startup.sh,他们分别是Windows环境下的批处理文件和Lin ...
- Python中单引号和双引号的作用
一.单引号和双引号 在Python中我们都知道单引号和双引号都可以用来表示一个字符串,比如 str1 = 'python' str2 = "python" str1和str2是没有 ...
- php手记之08-tp5中间件
01-创建中间件 php think make:middleware 中间件的名称 这个指令会 application/http/middleware目录下面生成一个中间件文件. 02-注册中间件三种 ...
- Python 画 直方图/条形图/柱状图
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/u011489887/article/de ...
- vue中样式被覆盖的问题
在我们引入外部的样式时,发现自己无论如何都改不了外部的样式,自己的样式老被覆盖,究其原因还是我们的 外部样式放的位置不对 main.js 我们应该在 main.js 的开头引入样式,这样的话就不存在覆 ...