C++参数化构造函数

C++ parametrized constructor

我想知道参数化构造函数 是否应该 总是只有实际初始化 class 属性的参数。例如,在调用中:

Texture background("C:\Documents\Images\background.png");

如果我不需要存储文件路径怎么办?

如果不需要存储路径,那就不要传给构造函数! :)

参数化构造函数旨在确保对象实例化时所有信息可用。所以只传递必要的信息。

如果您想遵循 RAII 习惯用法,则将所有请求的资源传递给构造函数并释放资源(如果对象锁定它们,如文件或端口)。

对象构造函数采用任何必要的参数来返回一个有效的功能对象。您可以允许带有额外参数的构造函数用于语法糖,但至少,您的对象应该是有效的。在您的情况下,我认为如果没有用作纹理的文件,纹理就没有意义,因此我认为不建议删除该参数。

请记住,您还应该致力于让您的代码易于测试。在那种情况下,当您想要实例化一个对象来测试特定方法时,复杂的构造函数可能会很痛苦。最后,更多的是一个决策过程。

我认为接受不直接存储在 class 中的参数没有任何问题。显然,如果它根本不影响 class,那只是浪费时间,但你可能会接受像 PRNG 种子这样的东西,你用它来填充你的 class 随机状态,并且有没有理由在那个点之后保留种子。

但是,在构造函数中传递要访问的文件路径是危险的,因为在该过程中可能会出现许多问题。你真的不想在你的构造函数中遇到这样的麻烦。

为了避免在构造函数中出现潜在的失败情况,您结束了将诸如文件访问之类的事情推迟到构造之后。因此,构造函数实际上不需要这些信息,因为将它传递给您用来访问文件的方法更有意义,这样您可以更轻松地处理错误。