Qt log2000 介面框架下的函式指標初探

2021-07-31 17:30:45 字數 1609 閱讀 3593

qt; c++ 11; c++函式指標;

實驗環境:

qt5.8.0 支援c++ 11

ubuntu 14.04 64bit

首先在qt creator中新建乙個project,取預設的mainwindow型別

#include "mainwindow.h"

int main(int argc, char *argv)

編譯肯定是沒問題的,結果是生成乙個視窗

但把其中的例項化部分放到函式中

void f()

int main(int argc, char *argv)

則沒有視窗生成,只是控制台輸出

starting/home/[path masked]/build-20170505_1-desktop_qt_5_8_0_gcc_64bit-debug/20170505_1...

原因是函式執行完變數就釋放了,所以沒有視窗被建立

於是使用指標修改上面函式體中的**

void f()

int main(int argc, char *argv)

現在可以生成視窗了,指標在棧中,指向的的是堆中的物件。

函式結束後只是指標消亡,物件還在棧中,所以本方法存在隱患,因為物件不消亡時間長了記憶體會被佔滿(?記憶體洩漏)

這是c++的乙個不好的地方,程式設計師不注意就到處漏記憶體

如果在函式體中加入delete

void f()
這種方法剛show就被delete了,控制是控制了,但視窗也彈不出來了

假如將函式的返回值設定為物件指標,看起來是乙個好的控制方法:

mainwindow * f()

int main(int argc, char *argv)

但最終視窗還是彈不出來,因為例項化以後還是被delete了,所以如果把delete語句放在return後面呢??

int main(int argc, char *argv)

現在可以彈窗了,然而並不會執行delete,因為在return語句後面。

所以,我們需要把delete放在exec之後,return之前。這可怎麼做到呢???

解決方法:可以把return的結果存起來,delete之後再返回

int main(int argc, char *argv)

這樣,使用函式體後,既可以彈窗,也可以避免記憶體洩漏。

學習所得:練習時勤想,勤試,以c++的思想程式設計。

集合框架原始碼分析一 介面篇

一。iterable介面 public inte ce iterable 二。inte ce iterator public inte ce iterator 三。inte ce collection public inte ce collectionextends iterable 四。inte ...

專案二 介面自動化測試框架

struts 展示層 它呼叫業務層完成運算邏輯,業務層再呼叫持久層完成資料庫的讀寫 hibernate 持久層 建立一系列的持久化類,每個類的屬性都可以簡單的看做和一張資料庫表的屬性一一對應,當然也可以實現關聯式資料庫的各種表件關聯的對應。當我們需要相關操作是,不用再關注資料庫表。我們不用再去一行行...

2016 01 29 介面實現的方法

乙個子類可以實現多個介面 package com.mz inte ce a3 inte ce c class b3 implements a3,c public void fun public void funa public class inte cedemo03 下面既是子類實現兩個介面和同時實...