6

我正在尝试为文件设置权限。我以为我可以在处理QFile对象时节省一行代码,就像这样。

QFile("somefile.txt").setPermissions(QFile::WriteOther);

它编译并运行,但没有做任何事情。当然,当我以正确的方式做到这一点时,它就奏效了。(毫不奇怪,那里。)

QFile tempFileHandle("somefile.txt");
tempFileHandle.setPermissions(QFile::WriteOther);

我认为这是了解 C++ 语法的好机会。我会接受我原来的方式行不通,但为什么呢?

4

2 回答 2

1

好吧,我不知道 QFile 也不知道你的观察结果是什么,但它可能归结为 QFile 的析构函数中所做的任何事情。

第一个示例创建临时对象。我猜它的构造函数创建了 somefile.txt。然后 setPermissions 设置您在该文件上指定的任何内容。现在的问题是析构函数做了什么:

  • 它可能会删除文件,而您什么也看不到
  • 它可能(我没想到但谁知道)将文件设置为只读
  • 恢复到一些默认值

在另一个示例中,您创建了命名变量,该变量在超出范围之前不会被销毁,您甚至可以将对象从磁盘上的文件中分离出来,这可能会使析构函数对该文件的影响无效。

于 2012-11-07T08:42:07.477 回答
0

好的,你说它编译并运行但没有做任何事情。setPermissions() 甚至被调用,你检查过吗?在我看来,编译器已经优化了整行,因为您纯粹是在处理临时对象。

于 2012-11-09T07:59:03.783 回答