gpt4 book ai didi

c++ - 创建类对象的 vector 时何时调用构造函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:30:03 34 4
gpt4 key购买 nike

假设我有一个名为 Foo 的类。 Foo 没有默认构造函数。它有一个构造函数 Foo(int x, float y)。

Bar 是一个容器类。它包含一个包含 Foo 实例的 vector 。

Bar::Bar(int numberOfFoos, int x, float y) {

foovector.resize (numberOfFoos);
for(int i = 0; i < numberOfFoos; i++) {
**read below**
}

此时,我要调用Foo的构造函数,将参数int x和float y传给它。 Foo 的构造函数根据 x 和 y 的值做不同的事情。

假设 Foo 有一个默认构造函数,调整大小 vector 函数到底做了什么?它是否只是在不调用默认构造函数的情况下调整 vector 的大小?换句话说,是否为 n 个 Foo 类型的元素保留了空间,但它们没有被初始化为任何东西??

如果它没有,就像在这种情况下怎么办?

在 for 循环中,我想以这种方式初始化每个 Foo 元素:

foovector[i].Foo(int x, float y);

但我不能以这种方式使用点访问运算符调用构造函数。我什至不知道此时调整大小函数是否已经调用了构造函数。

问题是,我该怎么做?

另一个关于类 vector 的相关问题:

在 Foo 中有一个包含 float 的 vector 。 float x 参数是它应该容纳的 float 。 Foo 的构造函数有一行

arrayofFloats.resize (x);

但这意味着计算机事先并不知道 Foo 的大小。每个 foo 可以有不同的大小。它不会给 Foo 的 vector 带来问题吗?如果每个 Foo 可以有不同的大小,如何声明特定大小的 vector ?

抱歉英语不好,我希望它已经足够清楚了。

谢谢。

最佳答案

不要使用resize 来保留空间。相反,使用 reserve:

foovector.reserve(n);                          // reserves memory only, no object
// constructions take place
for (std::size_t i = 0; i != n; ++i)
{
foovector.emplace_back(12 * i, i / 3.0); // pushes a new Foo(12*i, i/3.0)
} // at the back of the vector

关于c++ - 创建类对象的 vector 时何时调用构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15483643/

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