我想知道参数化构造函数是否应该总是只有实际初始化类属性的参数。例如,在调用:
Texture background("C:\Documents\Images\background.png");
如果我不需要存储文件路径怎么办?
我想知道参数化构造函数是否应该总是只有实际初始化类属性的参数。例如,在调用:
Texture background("C:\Documents\Images\background.png");
如果我不需要存储文件路径怎么办?
对象构造函数采用返回有效和功能对象所需的任何参数。您可以允许带有额外参数的构造函数作为语法糖,但至少,您的对象应该是一个有效的对象。在您的情况下,如果没有用作纹理的文件,我认为纹理没有意义,因此我认为不建议删除该参数。
请记住,您还应该致力于使您的代码易于测试。在这种情况下,当您想要实例化一个对象以测试特定方法时,复杂的构造函数可能会很痛苦。最后,这更像是一个决策过程。
如果您不需要存储路径,则不要将其传递给构造函数!:)
参数化构造函数旨在确保在实例化对象时所有信息都可用。所以只传递必要的信息。
如果您想遵循 RAII 习惯用法,则将所有请求的资源传递给构造函数并释放资源(如果对象锁定它们,如文件或端口)。
我认为接受不直接存储在类中的参数没有任何问题。显然,如果它根本不影响课程,那只是浪费时间,但是您可能会接受诸如 PRNG 种子之类的东西,您可以使用它来用随机状态填充您的课程,并且没有理由保留除此之外的种子观点。
但是,传入您打算在构造函数中访问的文件路径是危险的,因为在该过程中可能会出现许多问题。你真的不想在你的构造函数中遇到这样的麻烦。
为了避免构造函数中的潜在故障情况,您可以将文件访问等事情推迟到构造之后。因此,构造函数实际上不需要这些信息,因为将它传递给您用来访问文件的方法更有意义,您可以在其中更轻松地处理错误。