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