私は興味深いケースに出会いました:
クラスのメンバーとしてファイル ストリームがあり、ファイルにデータを書き込む関数があります。オブジェクトは、そのメンバーをパラメーターで初期化する別のクラスにパラメーターとして渡されます。このためにいくつかの問題がありましたが、文字列のベクトルとそれに行を追加することでそれらを解決することができました。しかし、今でもあるクラスから別のクラスにオブジェクトを渡していることがわかりました。
これが私が持っているものの例です:
class A
{
private:
std::ofstream oFile;
std::vector<std::string> oFileStringVec;
public:
A()
{
oFile.open("../Path/File.txt", std::fstream::out);
if (!oFile.is_open()) { std::cout<<"Error!!\n";}
}
~A() {}
void writeInfo(const std::string& s)
{ oFileStringVec.push_back(s); }
void closeFile()
{ oFile.close(); }
};
class B
{
private:
A ma;
public:
B(const A& aOb) : ma(aOb) {}
void foo()
{
// ...
ma.writeInfo(mystr);
}
// ...
};
class C
{
private:
A ma;
public:
C(const A& aOb) : ma(aOb) {}
// ...
void foo()
{
// ...
B myB(myA);
//...
}
};
foo()
そして、C オブジェクトを作成してそのメソッドを呼び出す関数があります。
void bar()
{
// ...
A myA;
// ...
C myC(myA);
myC.foo();
//...
}
ここで何が起こっているのかよくわかりません。オブストリームは複数回作成されていますか? 一度だけ作成されてから、再び開かれますか? すべてのデストラクタにoFile.close()
関数を追加するようにアドバイスしていただけますか? ベクトルのみをパラメーターとして渡し、関数内で ofstream を使用しbar()
ますか?