1、测试目的:几种不同的写法for循环效率
2、意外发现析构容器中的元素时,Qt内部崩溃。
1、TestRightLeftValueRef.h头文件
//左值右值效率测试
#ifndef TESTRIGHTLEFTVALUEREF_H
#define TESTRIGHTLEFTVALUEREF_H
#include <QWidget>
#include<QDebug>
#include<QStandardItemModel>
namespace Ui {
class TestRightLeftValueRef;
}
class MyClass
{
public:
int i = 0;
QString str = "0";
MyClass(const QString& str,int i)
{
this->str = str;
this->i = i;
qDebug()<<"MyClass 被构造";
}
};
class TestRightLeftValueRef : public QWidget
{
Q_OBJECT
public:
explicit TestRightLeftValueRef(QWidget *parent = nullptr);
~TestRightLeftValueRef();
void testRightValue(const QList<QString>&&data);
void testLeftValue(const QList<QString>&data);
void testRightValue(const QList<QString*>&&data);
void testLeftValue(const QList<QString*>&data);
private:
//测试QList的append接口
void testQListAppend1();//for循环外面定义变量
void testQListAppend2();//值测试2:在for循环内部定义变量
void testQListAppend3();//值测试3:使用右值引用
void testQListAppend4();//值测试4:使用左值引用
void testQListAppend5();//QList<QString*>strList1;
void testQListAppend6();//QList<QString*>strList1;指针2
void testQListAppend7(); //qDeleteAll 指针1崩溃
void testQListAppend8(); //qDeleteAll 指针2
private:
void initConnect();
private:
Ui::TestRightLeftValueRef *ui;
const static int count = 100000;
QStandardItemModel *m_model;
};
#endif // TESTRIGHTLEFTVALUEREF_H
2、TestRightLeftValueRef.cpp
#include "testrightleftvalueref.h"
#include "ui_testrightleftvalueref.h"
#include<QDebug>
#include<QDateTime>
#include<QElapsedTimer>
#include<QStandardItemModel>
using namespace std;
#define DebugTest 1
TestRightLeftValueRef::TestRightLeftValueRef(QWidget *parent) :
QWidget(parent),
ui(new Ui::TestRightLeftValueRef)
{
ui->setupUi(this);
m_model = new QStandardItemModel(this); //可以把这行放到头文件里面
ui->listView->setModel(m_model);
initConnect();
}
TestRightLeftValueRef::~TestRightLeftValueRe