簡體   English   中英

學習Qt - 創建QApplication

[英]Learning Qt - Creating a QApplication

我正在重新學習c ++(我有10年的Java經驗),而且我也在學習Qt ...

我習慣於通過以下方式創建對象(在Java中):

MyObject o = new MyObject();

但是在c ++中創建QApplication時,示例只顯示:

QApplication app(argc, argv);
app.setOrganizationName("My Company");
app.setApplicationName("The App");

突然之間,我有一個“應用程序”的引用,並沒有明顯的(對我來說)分配給應用程序...

這個模式是Q ++的東西還是特定的Qt? 這種模式叫什么?

謝謝!

不是Qt問題,但是,

//You have an assignment to app  
QApplication app(argc, argv);
// is just the same as
QApplication *app = new QApplication(argc, argv);

在C ++中,您可以選擇在本地(在堆棧上)或使用new(在堆上)創建對象。 當app對象具有明確的生命周期(main的長度)不會被刪除和重新創建且只有一個存在時,在本地將其分配在這里更有意義。

C ++的一個令人討厭的特性(因為它的遺產)是訪問結果對象的部分是不同的。 如果直接創建,則使用“。” app.name()但是如果用new分配你需要使用'c'指針表示法app->name()

PS。 有一些Qt特定的內存功能 Qt為你做了很多內存管理,例如。 copy-on-write,自動刪除。 在Qt中,你很少需要為一個對象調用delete - 對於C ++專家來說,這些有時很煩人,但是從Java看起來應該看起來更自然。

變量appQApplication app(argc, argv);行的堆棧上創建QApplication app(argc, argv); 它使用參數argcargv調用QApplication的構造argv ,在這種情況下創建名為app QApplication對象。

這不是Qt特有的功能。 您也可以使用構造函數以這種方式分配任何非虛擬類。 此外,它適用於基元,因此您可以這樣做:

int val(1); // Equivalent to: int val = 1;

這將創建名為val整數變量,其值為1。

您可以使用new在堆上分配QApplication對象,並像這樣使用它:

QApplication* app = new QApplication(argc, argv); // Heap allocation
app->setOrganizationName("My Company"); // Notice the -> instead of .
app->setApplicationName("The App");

->基本上是解除引用指針和使用的快捷方式.

在堆棧上分配通常是可取的(但並不總是可行),因為那時你不必關心對象的生命周期(使用一些智能指針或原始delete ),堆棧分配通常也比在堆上分配要便宜。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM