复制构造函数是否重新初始化文件成员
Does copy constructor reinitialize the file member
我遇到了一个有趣的案例:
我有一个文件流作为类的成员,以及一个在文件中写入数据的函数。对象作为参数传递给另一个类,该类使用该参数初始化其成员。我有一些问题,因为这个,我已经设法解决他们与字符串的向量和添加行到它。但是现在我发现我仍然把对象从一个类传递到另一个类。
下面是我所拥有的一个例子:
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();
//...
}
我真的不知道这里发生了什么。流是否被创建了不止一次?它只创建了一次,然后就重新打开了?你会建议我在每个析构函数中添加oFile.close()
函数吗?我是否应该将向量作为参数传递,并在bar()
函数中使用ofstream ?
我真的不知道这里发生了什么。流是否被创建了不止一次?
这是感动。参考资料:
4)移动构造函数。首先,move-从other构造基类(不影响rdbuf()指针),然后move-构造std::basic_filebuf成员,然后调用这个->set_rdbuf()来安装新的basic_filebuf作为基类中的rdbuf()指针。
它只创建一次,然后它只是重新打开?
见第一点
你会建议我在每个析构函数中添加file .close()函数吗?
这已经在std::ofstream
析构函数中自动完成了
我应该传递作为参数的向量和使用的流只是在bar()函数?
不知道上面的答案对你的用例有什么影响
在您的示例中,class A
只是打开文件并写入它,让我们称之为FileWriter
。然后还有两个类:class B
和class C
,它们都创建了这个FileWriter
(A
)的副本,即使它们不必这样做:
class B
{
private:
A ma;
public:
B(const A& aOb) : ma(aOb) {}
和
class C
{
private:
A ma;
public:
C(const A& aOb) : ma(aOb) {}
// ...
void foo()
{
// ...
B myB(myA);
//...
}
这是明显的设计错误,因为这不是组合而是聚合,换句话说:这不是"拥有"关系,这是"使用"关系。你应该做的是:
class B
{
private:
const A& a_;
public:
CBar(const A& a) : a_(a) {...}
};
A
真的是可复制的,你的意图是复制它,那么它不应该保存std::ofstream
对象,而是一个对它的引用。
- libstdc++ 文件系统中未初始化的用法?
- 如何从文件中读取值,然后使用它们来初始化 2D 数组C++
- wxWidgets 拖放文件事件处理程序初始化问题(无效static_cast)
- 在另一个文件中初始化的 extern 数组中未定义的引用
- 在成员变量在另一个文件中发生更改后,调用与初始化对象分开的函数
- 如何通过头文件中的函数初始化 const int 数组?
- 如何初始化文件中的文本并将其传递给类数组,以便在c++中输出
- C++ 在头文件或构造函数中初始化 const 类成员变量?
- 在定义(.cpp文件)中初始化静态浮点 constexpr 成员是可能的
- 在头文件中声明和初始化向量
- 如何从.txt文件中获取初始化的指针
- 实用程序函数不会在 .h 文件中初始化并在 main 中定义.cpp
- 尝试使用文本文件初始化多个结构变量
- C++图形初始化错误(语法或丢失文件缺陷?
- 从YML文件OPENCV C 初始化摄像机参数
- 初始化函数中的静态变量,而不是在文件开始时
- 初始化文件良好做法
- 在C++中使用结构的头文件、初始化文件和主文件
- 为什么在try块中初始化文件指针会导致管道破裂
- 复制构造函数是否重新初始化文件成员