2011-02-14 25 views
2

我有點困惑,想澄清這一點。爲什麼這個工作和如何?非靜態Qt對象

//QDir()::rmdir is from Qt Creator auto complete. 
//It does not work. 
//Says no such static function.I looked it up, turns out to be true. 
//Fair enough...though I'm not sure why auto-complete suggested it. 
bool success = QDir()::rmdir("Y:/dir1/dir2/dir3"); //Does not work. 

//Now I could make a QDir object as such. 
//I didn;t test this but I'm sure it would work fine. 
//However it seems clumsy. 
QDir d("Y:/");  //This seems like a waste. 
d.rmdir("Y:/dir1/dir2/dir3"); 

//Lastly, the source of my confusion. QDir().rmdir 
//This works, but WHY? 
//There is no empty constructor for QDir in Qt Documentation. 
//http://doc.qt.nokia.com/4.7/qdir.html 
//Yet this empty constructor version works. Why? 
bool success = QDir().rmdir("Y:/dir1/dir2/dir3"); 

我主要關心的是爲什麼最後一個examaple [QDir()。rmdir]工作? 我已經注意到這個Qt類的數量。這是一個匿名對象嗎?如果是的話,這對於對象清理來說意味着什麼?這種形式可以安全使用嗎?

+1

你的意思是`QDir :: rmdir(「Y:/ dir1/dir2/dir3」)?它仍然不起作用,因爲`QDir :: rmdir`不是靜態的,但`QDir():: rmdir`中的額外括號沒有意義。 – aschepler 2011-02-14 16:35:32

回答

6

其中一個QDir構造函數是:

QDir (const QString & path = QString()) 

你的QDir()XXX代碼調用此構造,然後使用默認使用的QString()作爲一個參數。

這是安全和正常的事情。

+0

啊,我應該仔細看看doc。我錯過了= QString()默認參數。清理完成後,我認爲只在函數中使用這種「匿名」/「臨時」對象風格會更好嗎?否則,考慮到我無法觸發刪除這個無名對象,可能需要很長時間才能刪除。對此的最佳實踐方法是什麼? – user440297 2011-02-14 00:59:06

0

QDir創建一個臨時對象。如果你打電話的話,情況也是如此。如:

QString s("123"); 
int answer = 40 + s.left(2).right(1).toInt(); 

第二行產生2個臨時對象。

相關問題