Почему это работает и как? Нестатический объект Qt - PullRequest
2 голосов
/ 14 февраля 2011

Я немного растерялся и хотел бы прояснить это.

//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");

Моя главная проблема в том, почему работает последний пример [QDir (). Rmdir]? Я заметил это на ряде классов Qt. Это анонимный объект и если да что это означает в отношении очистки объекта? Безопасно ли использовать эту форму?

Ответы [ 2 ]

6 голосов
/ 14 февраля 2011

Один из конструкторов QDir:

QDir ( const QString & path = QString() )

Ваш код QDir (). Xxx вызывает этот конструктор, который затем использует значение по умолчанию для использования QString () в качестве одного аргумента.

Это безопасно и нормально.

0 голосов
/ 14 февраля 2011

QDir создает временный объект. То же самое, если вы звоните. как:

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

Вторая строка производит 2 временных объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...