C++ で ctor が呼ばれる前にメンバ変数が valid にならないといけないせいで unique_ptr における nullptr みたいな無効値を許さなくてはいけないの、マジで涙を流してデフォルトコンストラクタ用意してる
@lo48576@mastodon.cardina1.red
よくわからんのでプログラムのシナリオおくれ
@tacumi
・HardwareManager がある
・HardwareManager が、ハードウェアへのアクセス権付きのハンドルや、 GPU 上にアロケート・アップロードされたリソースのハンドル等を持つ
・リソースのアップロード等は複雑な手順やエラー処理や変数間の依存関係を伴うため、 Ctor():m_field{field}, m_other{other}, ... {} のような形式で最初に初期化するのは困難
みたいな状況が考えられます
@tacumi この場合、 HardwareManager は「生存している限りシステムは良好な状態である」という性質を捨てる必要があって、 unique_ptr が何も指さないことがあるように、あるいは fstream がファイルの閉じられた状態や何も開いていない状態であるありうるように、「なんかよろしくない状況なんだけどプログラムとしてクラッシュはしない」くらいの雑な保証までレベルを落とす必要があります。
C++の言語仕様的に避けられない悲しいやつです
(C++11 以降だと、 move された後の抜け殻には何が入っているのみたいな問題も同様の「有効ではないけど未定義動作とかは起こさない値」みたいなのを入れとくことで誤魔化されるのがそこそこ一般的です)
@lo48576@mastodon.cardina1.red fstreamが開かれたりしないときはどういう動きが理想なんですの?
使えるようになるまでチャレンジするのが一般的なんですの?
@tacumi fstream が「開いているファイル」を表現するのであれば、デフォルトコンストラクタは存在すべきでないですよね。 ctor で開くのに失敗したら例外が飛んで fstream は存在できない。
Rust の std::fs::File とかそんな感じなんですが