我遇到了一个有趣的案例:
我有一个文件流作为类的成员,还有一个在文件中写入数据的函数。该对象作为参数传递给另一个使用该参数初始化其成员的类。因此,我遇到了一些问题,我设法用字符串向量解决了这些问题,并在其中添加了行。但现在我发现我仍然将对象从一个类传递到另一个类。
这是我所拥有的一个例子:
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);
//...
}
};
我有一个函数,我创建一个 C 对象并调用它的foo()
方法:
void bar()
{
// ...
A myA;
// ...
C myC(myA);
myC.foo();
//...
}
我不确定这里发生了什么。ofstream 是否创建了不止一次?它只创建一次然后重新打开?你会建议我在每个析构函数中添加oFile.close()
函数吗?我应该仅将向量作为参数传递并仅在bar()
函数中使用 ofstream 吗?