zoukankan      html  css  js  c++  java
  • 智能指针.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() > 0)
        {
            std::shared_ptr<SmartPtr> ptr = Fvtr.at(0);
            //std::unique_ptr<SmartPtr> ptr = Fvtr.at(0);
            Fvtr.removeAt(0);
            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、

  • 相关阅读:
    SQL注入的一般步骤及防范方法
    防止SQL注入的五种方法
    document.getElementById("orderform").submit() 提交给了谁?
    页面调试-F12
    rs.last()续
    rs.last()
    14课后习题
    HashMap
    链表
    习题
  • 原文地址:https://www.cnblogs.com/cppskill/p/11897513.html
Copyright © 2011-2022 走看看