gpt4 book ai didi

c++ - 我必须在构造函数中初始化所有内容吗?

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

我相信任何未初始化的东西都会自动初始化,这有点危险(也是不好的做法)。我也明白初始化列表通常更有效(在某些情况下是必要的),但是,我想在将它们分配给成员变量之前通过函数调用验证一些参数。

例如,使用典型的赋值构造函数,我会有这样的东西:

class MyObj
{
private:
int one_;
int two_;
DiffObj diffObj_;

... // other stuff
}

MyObj::MyObj(int a, int b, std::string type, std::vector<double> params)
{
one_ = a;
two_ = b;
if (verifyType(type, params))
{
diffObj_ = createDiffObj(params);
}
}

但是在这种情况下,我该如何利用初始化列表呢?我想也许可以通过在构造函数中初始化一些参数并使用单独的调用来初始化其余参数,但我不太确定这是否符合标准。

MyObj::MyObj(int a, int b) :
one_(a),
two_(b)
{}

MyObj::initializeDiffObj(std::string type, std::vector<double> params)
{
if (verifyType(type, params))
{
diffObj_ = createDiffObj(params);
}
}

最佳答案

这样的事情是完全合理的。你可以有一个初始化列表并在你的构造函数中做一些工作,你不必选择一个。

 class MyClass {
public:
MyClass(int a, SomeStruct b)
: _a(a) {
if (isValid(b)) {
// Initialize _b
_b = createWeirdThingFromSomeStruct(b);
}
}
private:
int _a;
WeirdThing _b;
};

关于c++ - 我必须在构造函数中初始化所有内容吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39339618/

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