[英]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看起來應該看起來更自然。
變量app
在QApplication app(argc, argv);
行的堆棧上創建QApplication app(argc, argv);
它使用參數argc
和argv
調用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.