6

ファイルのアクセス許可を設定しようとしています。QFileオブジェクトを処理する際に、コードを 1 行節約できると考えました。

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 に答える