假设我有一个类Foo
,其中有一个成员变量,它是浮点数的std::vector
,bar
。然后,我创建了一个Foo
实例,称为foo
。假设在程序运行之前我不知道bar
的长度,但是在调用foo
的构造函数时,我知道它的长度应该是x
。
我可以想出三种方法来初始化bar
的长度,我只是想知道大多数人倾向于使用哪一种。我已经按照我认为是“最佳实践”的方法对它们进行了排序,但我更好奇人们在实践中“实际使用”了什么方法。有时,我使用的方法使代码更清晰地遵循,而不一定遵循最佳实践.
bar
是一个私有成员,我在foo's
构造函数期间调整了它的大小,例如Foo foo(x){bar.resize(x)};
bar
是一个私有成员,我称之为foo.ResizeBar(x)
,它在创建foo
之后在内部调整bar
大小。bar
是一个公共成员,我在创建foo
之后调用foo.bar.resize(x)
。或者,在代码中:
1.
class Foo
{
private:
std::vector<float> bar;
public:
Foo(int x)
{
bar.resize(x);
};
};
int main()
{
Foo foo(100);
return 0;
}
2.
class Foo
{
private:
std::vector<float> bar;
public:
Foo()
{
};
void ResizeBar(int x)
{
bar.resize(x);
};
};
int main()
{
Foo foo;
foo.ResizeBar(100);
return 0;
}
3.
class Foo
{
public:
std::vector<float> bar;
Foo()
{
};
};
int main()
{
Foo foo;
foo.bar.resize(100);
return 0;
}
发布于 2015-08-13 10:09:10
所有这三种方法的问题是,您没有必要为您的向量调用默认的初始化器,然后修改已经初始化的向量以满足您的需要。
您应该使用初始化程序列表调用正确的初始化程序:
Foo::Foo(std::size_t x) : bar(x, 0) { }
发布于 2015-08-13 10:08:09
最好的方法不是在您发布的选项列表中。最好的方法是使用bar
初始化成员初始化程序列表。
Foo::Foo(int x) : bar(x) {}
https://stackoverflow.com/questions/31995403
复制