在构造函数中的成员初始化之前执行必要的工作
Doing necessary work before member initialization in constructor
我有一个关于类及其构造函数的设计问题,C++。我来自几年的Java经验。在Java中,我会做这样的事情:我有一个类来管理SQLite数据库作为存储后端。在此类的构造函数中,我将应用程序数据目录的路径作为参数移交。然后,我将查找数据库文件,建立连接,例如加载表的最新条目以进行缓存。
我现在的问题是如何在C++中做到这一点。我这里的主要问题是,当执行到达构造函数的第一个语句时,所有类成员都已经隐式或显式初始化。
我现在的问题是:如果我在使用构造函数参数初始化类成员之前对它们进行一些计算,我将如何在C++中做到这一点?
我已经发现我可以简单地在构造函数中使用赋值来成员,但我也读到你不应该这样做,因为这意味着成员首先使用其默认构造函数初始化,然后再次初始化。
在初始化类成员之前,当您要进行一些计算(例如加载和解析配置文件(时,规范的方式是什么?我宁愿简单地为构造函数提供一个路径,然后使用构造函数中的加载值加载和解析成员初始化。
将计算部分放在单独的函数中:
class C {
std::string x;
int y;
C(int xarg, int yarg);
};
std::string computeX(int xarg, int yarg) {
...
return result;
}
C::C(int xarg, int yarg) : x(computeX(xarg, yarg)), y(yarg) {}
作为"初始化"函数,您可以使用全局函数,在源文件中本地定义的函数(例如在未命名的命名空间中(,甚至可以调用就地定义的lambda。您还可以使用静态成员函数(如果它是私有的(或其中一个参数的成员函数。
相关文章:
- 从不同目录执行时"symbol lookup error:",否则从构建目录执行时按预期工作
- C++ 在条件未按预期工作时执行
- 工作线程在执行太快后永久休眠
- 无法使用 Visual Studio 启动 DirectX 11 可执行文件,生成工作正常
- 程序按执行方式工作,直到我向其添加析构函数为止
- 等待所有线程完成一项工作,然后执行另一项工作
- 该程序在执行时停止工作.我在代码块中制作了这个程序
- 为什么将可执行文件重命名为临时文件的此代码段不能按预期工作?
- CLION 调试器在执行一个步骤后停止工作
- 从本地工作,但在执行之间的随机端口上没有收到任何内容
- 为什么添加代码会破坏工作,即使它没有执行?
- 现代C++.从继续执行的工作线程返回数据结构
- 我的程序在执行期间停止工作
- C 可执行文件不从文件夹工作,而是在Mac上从控制台上工作
- Java在QT 5.7中为Android执行但不执行C (在先前的QT中工作)
- 为什么函数 sleep() 在 klee 执行 Objectfile 时不能工作?
- 创建不需要任何进一步安装即可在其他计算机上工作的可执行文件?
- 调试执行工作正常,但正常的一段故障
- 使用静态数据的构造函数在main()之前执行工作
- ROS节点无法通过启动文件执行工作