为什么我不能将方法链接到构造函数?

时间:2012-11-07 00:04:34

标签: c++ qt object

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

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

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

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

我认为这是理解C ++语法的好机会。我会接受我的原始方式不起作用,但为什么?

2 个答案:

答案 0 :(得分:1)

好吧,我不知道QFile,也不知道你的观察到底是什么,但它可能归结为QFile的析构函数所做的一切。

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

  • 它可能会删除文件,而您什么也看不见
  • 它可能(我不会指望这个,但谁知道)设置文件只读
  • 还原为某些默认值

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

答案 1 :(得分:0)

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