gpt4 book ai didi

c++ - 在两个构造函数之间进行选择的 RAII 方式

转载 作者:搜寻专家 更新时间:2023-10-31 01:07:34 25 4
gpt4 key购买 nike

我有一个包含大型数据表的类,它有一个构造函数,该构造函数采用计算该数据所需的所有参数。但是,它需要很长时间才能运行,所以我添加了一个构造函数,它接受一个流,并从该流中读取数据。不过,我在想出设计此类的 RAII 方法时遇到了麻烦,因为我有两个构造函数,并且在运行时我需要在它们之间进行选择。这是我想出的:

std::string filename; // Populated by command line arguments
DataTable table; // Empty constructor, no resource acquisition or initialization

if( filename.empty() ) {
table = DataTable(/*various parameters*/);
} else {
std::ifstream filestream(filename);

table = DataTable(filestream); // Reads from file
}

这对我来说看起来很脆弱。默认构造函数将使对象处于有效状态,但无用。它的唯一用途是在外部范围内创建一个“临时”对象,分配给 if 语句的一个分支。此外,在幕后有一个“初始化”标志来管理对象是默认构造的还是完全初始化的。有没有更好的方法来设计这个类?

最佳答案

可能是这样的:

DataTable foo = filename.empty()
? DataTable(x, y, z)
: DataTable(std::ifstream(filename));

关于c++ - 在两个构造函数之间进行选择的 RAII 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19182841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com