我来自 Java 背景,但之后我学习了 C++,并且已经使用它编程了几年(主要是调试和编写修复程序,而不是从头开始设计程序)。然而,我今天遇到了一个问题,坦率地说,我有点惊讶花了这么长时间才遇到它。
假设我有一个名为 Class1 的类,其头文件包含(以及其他代码):
class Class1 {
private:
Class2 object;
}
Class2 类没有指定默认构造函数。现在,在 Class1 构造函数中,我正在读取文件的二进制标头并使用从中解析的信息来初始化 Class2,如下面的伪代码所示:
Class1::Class1(std::string) {
// Read some binary info from a file here
// Parse that binary info
object2 = Class2(info);
在 Java 中,因为它没有使用 RAII 范式,所以这是完全合法的。但是,由于 C++ 使用 RAII,所以在我做的时候,对象 2 已经用它的默认构造函数初始化了object2 = Class2(info);
。我不能只调用那个构造函数(在 Class1 头文件中),因为我还没有需要创建的信息object
。但是,我不能只object2
对构造函数进行本地化,因为我需要其他函数才能看到/使用它。
显然这行不通。这些东西的标准方法是什么?我实际上想过只是将 Class1 更改为具有 Class2 指针,如下所示:
class Class1 {
private:
Class2* objectPointer;
}
然后调用*objectPointer = Class2(info)
. 但是,在我的情况下,“Class2”是一个 ifstream,似乎该operator=
函数已被删除并且不适用于任何一种方法。
所以......我该怎么做?